# Claymates Carnival Bush ROM Analysis

## Summary

| Question | Finding |
|---|---|
| Is there a special trigger around the bush? | **No bush-specific trigger was found.** There is a generic overworld marker nearby, but it is one of seven equivalent markers and contains no secret-event logic. |
| Can the game make the bush disappear? | **No dedicated removal mechanism was found.** The visible bush is baked into the compressed background map, and its nearby marker lacks the progression/removal checks used by actual removable obstacles. |
| Can the area spawn a level? | **No.** World 1 has exactly four hard-coded level-entry coordinates. None is at the bush. |
| Is there evidence of planned content being cut? | **Only circumstantial visual evidence.** The inaccessible carnival artwork exists, but there is no fifth level node, destination, event handler, or dormant script associated with it. |

## What the bush actually is

The ROM is a 1 MiB FastROM HiROM image:

- SHA-256: `6d9cd7f0cda3c0a82ed3f6a92cbbba4fe8365438e0a7867ad1cae2044d1738eb`
- First-overworld resource: ROM `$054DA5`, CPU `$C5:4DA5`
- Map dimensions: 53 × 43 metatiles
- Compressed map data decompresses to exactly `53 × 43 × 2 = $11CE` bytes.

The visual bush beside the carnival corresponds to this unique vertical metatile pair:

| Map cell | Runtime WRAM | Value |
|---|---:|---:|
| `(27,4)` | `$7F:01DE` | `$0206` |
| `(27,5)` | `$7F:0248` | `$0023` |

Therefore, the visible bush is part of the background map rather than a normal sprite that can simply be despawned.

There is also a nearby spatial record:

```text
ROM/CPU: C5:5383
Raw:     75 02 A5 01 89 00
Kind:    $0275
Position: ($01A5,$0089)
```

Masked type `$075` dispatches to `$CC:A196`. That routine requests generic actor type `$B2`, but:

- It has no level-selection logic.
- It has no progression flag check.
- It does not call the level-start routine.
- In the state created here, actor `$B2` selects the no-op custom callback at `$C0:FDE6`, which is just `RTL`.

Importantly, `$075` is **not unique to this bush**. The first map contains seven such records. Other overworld code scans them as general positioning/scrolling anchors. Thus, this nearby record is normal engine bookkeeping, not a hidden bush switch.

Generic actor/collision processing may still use it, so this does not mean that it literally does nothing. What it definitely does not contain is a bush-removal or level-spawning event.

## Level-entry audit

The level-entry routine is at `$CC:A556`. For the first overworld, it checks exactly four coordinates, each with a 12-pixel tolerance:

| Trigger coordinate | Destination level ID |
|---|---:|
| `($02A8,$0088)` | `$04` |
| `($02D8,$0148)` | `$14` |
| `($01F8,$0138)` | `$01` |
| `($0118,$0158)` | `$03` |

Relevant tables:

- Coordinates: `$CC:B40E`
- Destination IDs: `$C0:2E9A`

There is no fifth entry and no coordinate near the bush at approximately `($01A5,$0089)`.

This was also tested dynamically:

- Forcing Clayton to the bush/marker coordinates caused the level-check routine to run repeatedly, but it did **not** select a level.
- As a positive control, forcing Clayton to the legitimate node at `($0118,$0158)` immediately wrote destination `$03` to the level-selection variable at WRAM `$36F8`.

Therefore, a GameShark teleport through the bush cannot activate anything there because there is no trigger coordinate to activate.

## Could the bush disappear?

Actual conditional obstacles use different spatial types:

- Type `$015` → `$CC:AB60`
- Type `$016` → `$CC:AD92`

Those handlers perform explicit state/progression checks before creating or activating their obstacle-like actors. Type `$075` → `$CC:A196` has no equivalent check.

The first-overworld level descriptor also contains no active map-specific update script:

- Two optional hook fields are `$FFFFFF`.
- Its periodic callback is `$C0:FDE6`, the one-instruction `RTL` stub.

That explains why taking an axe-equipped robot to the bush does nothing: the bush is not registered through the same gated obstacle mechanism as the trees and rocks intended for robots.

Strictly speaking, a sufficiently generic map-mutation subsystem could rewrite any tile in WRAM. However, no event, flag, callback, or reference was found that targets these bush cells. In the retail game data, there is no programmed route for making it disappear.

## Does this look like abandoned content?

The carnival artwork is real and deliberately present, so it is reasonable to suspect that designers once considered making it accessible. But the code does **not** preserve the expected scaffolding for a removed level:

- No fifth overworld node.
- No unused destination attached to the area.
- No bush-specific event.
- No conditional map variant.
- No removal flag.
- No active custom overworld hook.
- No dormant level-start call associated with the nearby record.

The best-supported interpretation is:

> The carnival is inaccessible scenery or an abandoned map-design idea whose gameplay code was either never implemented or was removed completely. The final ROM does not show evidence that a finished fifth stage was merely disabled at the last minute.

The bush itself is implemented using ordinary map/marker machinery rather than a conspicuously hacked-out event. Therefore, “they blocked an unfinished route” is plausible from the artwork, but “they lazily disabled an already-programmed level at the last minute” is not supported by the ROM.

## Methodology

The findings above were produced through a combination of:

- Static analysis of the ROM's HiROM structure, map resources, spatial records, callback tables, and 65816 code.
- Decompression and inspection of the first overworld's tile map.
- Headless emulator instrumentation in an isolated Linux container.
- Scripted WRAM monitoring and forced-coordinate tests.
- A positive-control test against a known working level node.

The original ROM was not modified.
