Skip to content

Search Options

Lawn Meower edited this page Aug 31, 2024 · 2 revisions

In order to search for a certain value in RAM you can choose between many different search options. Some are exclusive to some data types while others are universally applicable.

Range Options

If a system has more than one memory region you can usually select between all of them or some of the available ones.

Screenshot 2024-08-19 193117

Range Start/End

It is possible to manually define the beginning and end of a range. This is useful to speed up the search process if you vaguely know where the desired value is located.

Cross-Region

With this option it is possible to scan multiple memory regions at once. By redefining the range start and end you can skip certain ranges entirely if desired.

Endianness

Before you start a search you can select whether the search should handle the target memory area(s) as little endian or big endian. The best option is usually automatically selected, but in some cases you may change it manually.

Re-reorder Region

Some emulators reorder the emulated Memory in 2 or 4 byte chunks of the opposite of their original endianness. This option ensures all values and addresses are still properly considered. The best option is automatically selected for you but you can always change it if required.

Writable and Executable Regions

Memory regions may have different access permissions. Readable ranges are always considered. With the write and exec. checkboxes you can also define whether to include writable and executable regions as well. It is always considered good practice to also include writable regions but exclude executable regions.

Value Type Options

Value Type

Here you can select between the 4 major options for value types: Primitive, Array, Text, and Color. Each option comes with their own set of specifications below.

  • Primitive Datatypes You can read more about primitive datatypes here. As of now MungPlex features the following primitive types: int8, int16, int32, int64, float, double. You can also select the signedness for integer types.

![Screenshot 2024-08-19 202000](https://github.com/user-attachments/assets/dda799eb-82f1-47e1-867f-4418158f8401)
  • Arrays Array types allow you to scan for sequences of values of unsigned integer types (uint8, uint16, uint32, and uint64). Elements are separated by commas (,) and each element can be of another numeral system. Wildcards (indexes to be ignored) can be expressed with a #.

Example (unsigned int16 array): 0x1337hex, 069oct, 420dec, # wildcard

Text Types

These allow you to search for texts/strings occurring in the RAM. You can select of a big variety of character encodings. However, it is often not known which encoding a game uses. The following encodings are available:

  • ASCII
  • UTF-8
  • UTF-16 LE
  • UTF-16 BE
  • UTF-32 LE
  • UTF-32 BE
  • Shift-Jis CP932
  • KS X 1001
  • Jis X 0201 Full Width Katakana
  • Jis X 0201 Half Width Katakana
  • ISO-8859-1 - ISO-8859-16
  • Pokémon Gen I English
  • Pokémon Gen I French/German
  • Pokémon Gen I Italian/Spanish
  • Pokémon Gen I Japanese

Color

It is possible to search for color values appearing in textures, meshes, effects and so on. The following color types are available:

  • RGB888: 24-bit color value commonly used in 3D games
  • RGBA8888: Same as above but with an additional 8-bit alpha channel
  • RGB565: 16-bit color value commonly used in textures of GameCube/Wii games
  • RGB5A3: 16-bit color value with alpha flag commonly used in textures of GameCube/Wii games. The alpha channel can be enable by checking the force alpha checkbox
  • RGBF: Floating point/HDR variant of RGB888. Commonly used for colors that require smooth transitions like the engine flames in F-Zero GX or ink in Splatoon
  • RGBAF: Same as RGBF but with an additional alpha channel

Search Options

Search options allow you to control the memory scan.

  • Counter Iteration: Select the counter iteration you want to compare against. The last one is always auto-selected so if you happen to make a mistake during the search process you can always jump back.

  • Alignment: Specifies the byte alignment for each value read. An alignment of 4 is usually the best for big-endian systems and generally any kind of value bigger than 2 bytes. Values of type int8 and int16 may use an alignment of 1 and 2 respectively. An align of 1 is recommended for string/text types.

  • Comparison Type (detailed explanatons below):

    • Unknown Value: Compares the following iteration's values against the current/counter iteration ones.
    • Known Value: Scans the memory against a specific value
  • Condition Type (detailed explanatons below):

    • Equal: Scans for equality or unchanged values
    • Unequal: Scans for inequality or changed values
    • Greater: Scans for values greater than the current or known value
    • Greater or Equal: Scans for values greater than or equal to the current or known value
    • Lower: Scans for values lower than the current or known value
    • Lower or Equal: Scans for values lower than or equal to the current or known value
    • Increased by: Scans for values increased by a specific amount
    • Decreased by: Scans for values decreased by a specific amount
    • Value Between: Scans for values between 2 specific values
    • Value Not Between: Scans for values outside the range of 2 specific values
    • AND: Scans for values where at least all true bits are also set within the current or known value
    • OR: Scans for values where at least one true bit is set within the current or known value
  • Value: The known value, increment, decrement or range begin to be scanned for.

  • Secondary Value: Range end for range-based seraches.

  • Precision (%): Accuracy for floating point and color type searches. Best is a value between 90 and 100%.

  • Cached: Check this if you want previous search results to be held in RAM (not recommended). This may speed up your search but also increases memory usage.

  • Values are hex: Interprets input integral values as hexadecimal. Do not prepend 0x to the known value. Results of integrals and arrays are also affected. Arrays to be scanned are not.

  • Case Sensitive: Whether strings to be searched for should be considered case sensitive (recommended). Case insensitive searches are slower but may deliver more results.

  • Color Select: Use this to select the target color value.

  • Color Wheel: When checked, it displays a color picker wheel instead of a square.

  • Pick color from screen: Allows you to pick any color off the screen by click.

  • Search: Performs a new search or new iteration.

  • Reset: Resets current search.

Comparison Types

There're two main comparison types to be aware of. Known value searches and unknown value searches.

Known Value Search

This type of search compares any value in RAM against a specific known value. All values that correlate with the comparison options will be listed in the results are.

Unknown Search

An unknown search always begins with an initial scan of the RAM. Then you compare all values of the last scan against the current state of the RAM to filter the the results. This is used if the exact value is not known but you can tell whether it has increased, decreased or stayed the same. This is the case for energy bars, speed values, ...

Mixed Search

You can change the Search Type off-the-cuff to if desired. This may come in handy if you lost track of the exact value but know whether it has increased, decreased or stayed the same.

Condition Types

Condition types define how the RAM is scanned to filter the desired value(s) from all the unwanted ones.

Equal

This checks all values for equality. This means, in a known value search all values that are equal to the known value will be filtered from all the others. In an unknown value search all current values that are equal to the previous scan's values will be filtered from all the others. This comparison type may also be referred to as unchanged.

Unequal

This checks all values for inequality. This means, in a known value search all values that are not equal to the known value will be filtered from all the others. In an unknown value search all current values that are not equal to the previous scan's values will be filtered from all the others. This comparison type may also be referred to as changed or not equal.

Greater Than

This means, in a known value search all values that are greater than the known value will be filtered from all the others. In an unknown value search all current values that are greater than the previous scan's values will be filtered from all the others. This comparison type may also be referred to as bigger than.

Greater Than or Equal

This means, in a known value search all values that are greater than or equal to the known value will be filtered from all the others. In an unknown value search all current values that are greater than or equal to the previous scan's values will be filtered from all the others. This comparison type may also be referred to as bigger than or equal.

Less Than

This means, in a known value search all values that are less than the known value will be filtered from all the others. In an unknown value search all current values that are less than the previous scan's values will be filtered from all the others. This comparison type may also be referred to as smaller than or lower than.

Less Than or Equal

This means, in a known value search all values that are less than or equal to the known value will be filtered from all the others. In an unknown value search all current values that are less than or equal to the previous scan's values will be filtered from all the others. This comparison type may also be referred to as smaller than or equal or lower than or equal.

AND

This means, in a known value search all true bits of the known value must be also true in the scanned values. In an unknown value search all current values are checked if their true bits are also set within the previous scan's values.

OR

This means, in a known value search at least one true bit of the known value must be also true in the scanned values. In an unknown value search all current values are checked if at least one of their true bits is also set within the previous scan's values.

Increased By

This scans for all values being increased by a certain amount amount since the previous scan.

Decreased By

This scans for all values being decreased by a certain amount amount since the previous scan.

Value Between

This scans for all values within a certain range.

Value Not Between

This scans for all values outside a certain range.

Testing Results

A list of all results will be shown after every scan. MungPlex features certain options for testing.

Poke

The Poke button writes the value defined in the text box to the given address only once.

Screenshot 2024-08-19 193542

Previous Value

Sometimes you might want to poke the previous value instead of the current one. By checking this option the value inside the textbox will be ignore and the previous one(s) will be used instead.

Multi-Poke

If this checkbox is checked, it is possible to select multiple values to test at once. To select a certain range, select the first desired item by left-click, then hold SHIFT and click the last one you need. If you want to cherry-pick only a few value you can do so by holding CTRL (STRG) and clicking all desired values.

Screenshot 2024-08-19 194035

Results Panel

Here are all results listed. Values can be altered and written back to the game for testing.

  • Results: Displays the amount of found values.
  • Address: The address of the selected results item.
  • Value: The value of the selected reselts item.
  • Page: Page navigation through all results. Enter any number to jump to the desired page or click the +/- buttons.
  • Previous: Check this if you want to poke the previous value to the game.
  • Multi-Poke: Check this if you want to poke multiple values to the game. To select multiple values hold ctrl (de: strg) and click each item you want. To select a range of results click the first desired item and hold shift while clicking the last one. Sadly there's some bug going on so you might need to click again if the selection didn't update.
  • Poke: Writes all selected values to the game.
  • Max. results per page: Specify how many results you want to have been drawn on each page.