Prelude Manual / Editing the Fishing Pond Open the editor →

Editing the Fishing Pond

The fishing minigame is one actor, not a scene full of them. When the scene loads, that actor builds the whole pond by itself: the owner, the fish, the lily pads, the sign and the prize tank.

This means most of the pond is fixed in place. You cannot move the fishing game to your pond. You have to move your pond to the fishing game.

This page lists what is fixed, what you can change, and how to build a custom pond that still works.

One actor starts everything

The vanilla scene places a single Fishing actor, with the pond owner role (any parameter value under 100). That one actor spawns every other part of the minigame when the scene loads.

You do not place the fish. You do not place the lily pads. Place the owner only.

The actor also ignores the position you give it. It reads your actor entry only to learn that it is the owner, then moves itself to its own coordinates and sets its own rotation and scale.

What the actor places for itself

All positions are world units. x, y, z are absolute — they are not relative to your actor entry.

Part Position Notes
Pond owner (the man) 160, -2, 1208 Faces the pond. Scale 0.011.
Sign 53, -17, 982 An En_Kanban actor, spawned by the owner.
Prize tank and record fish 130, 40, 1300 Both the glass and the fish are drawn by the actor.
15 to 17 catchable fish See the list below 15 normally; 16 or 17 when the loaches appear.
60 background fish Three groups on a circle of radius 720, at y = -35 Decoration only. You cannot catch them.
140 pond props Fixed list, y between -73 and -22 95 lily pads, 41 reeds, 11 rocks, 6 wooden posts.
4 sinking-lure hiding spots For example -364, -30, -269 and 1129, 3, -855 Where the hidden lure can be found.

Two things about the props are easy to miss:

The pond shape is assumed, not read

Every boundary check in the minigame measures the distance from x = 0, z = 0. There is no offset. The pond is a circle around the world origin.

The floor is calculated from that distance too. The game does not read your collision triangles to decide where the lure or the fish sit — it uses this shape:

      outside 920: the ground rises 0.11 per unit

           \                                   /
            \                                 /
   ~~~~~~~~~~+~~~~~~~~ water surface ~~~~~~~~+~~~~~~~~~   <- the water box
              \                             /
               \    the bottom drops       /
                \   0.147 per unit        /
                 \_______________________/

                  about 135 units below the surface
                  at the centre (x = 0, z = 0)

            |<----------- 920 ----------->|
                    radius, from x = 0, z = 0

The important distances:

Distance from the centre What happens there
920 The edge of the water. The lure, the fishing line and the splashes cannot go past it. Link's shadow fades inside it.
about 800 Fish stop following the lure and turn back.
about 750 Fish will not choose a target past this.
720 Where the background fish swim.

So a custom pond should be a bowl of about 920 units radius, centred on the world origin, about 135 units deep in the middle. If your bowl is a different shape, the lure will hang above your floor or sink into it.

What your scene does control

The list is short, but one item on it matters a lot.

The water level

The only value the minigame reads from your scene is the surface height of the first water box in the scene collision. Everything vertical follows it: the water surface, how deep the lure sinks, where the fish swim, the ripples.

In the vanilla scene there is exactly one water box:

Field Value
Surface height (ySurface) -24
Covers x from -952 to 1048, z from -926 to 1074

Two warnings:

Everything else

Your room mesh, your collision, your textures, your lighting, your skybox and the dialog text are all yours. Just remember that the terrain is only for looks and for Link's own movement — the fishing maths ignores it, so your floor should follow the bowl shape above.

Keep the scene ID

Build your pond by replacing the existing Fishing Pond scene, not by putting the actor in a new one.

Four places in the game check for scene 0x49 by number. One of them matters: the code that puts the fishing rod on the B button and locks the other buttons while you play. In any other scene that does not happen. Link still holds the rod, but the HUD keeps your normal B item and you can still draw a sword in the middle of the game.

The other three are cosmetic: the pond's title card, the pond's own underwater blur, and one small music behaviour.

In Prelude, importing a .glb over the viewed scene replaces it at its existing path, so the scene ID stays 0x49. Importing into a spare debug slot gives you a new scene ID instead, and the B button code will not follow you there.

Landmarks on dry land

These are outside the water, and the game watches Link's position against them. If you rebuild the shop area, keep them roughly where they are.

Place Where What it does
The counter z greater than 1150 The pond fish stop being drawn. You are meant to be indoors here.
The exit door z greater than 1360, and x within 25 of 0 While you hold the rod, Link is pushed back and the owner stops you leaving.
The prize tank around 130, 40, 1300 The record fish and its glass.

Fish starting positions

The catchable fish. Every one of them starts within about 790 units of the centre.

# Position (x, y, z) Size Attraction
1 666, -45, 354 38 0.10
2 681, -45, 240 36 0.10
3 670, -45, 90 41 0.05
4 615, -45, -450 35 0.20
5 500, -45, -420 39 0.10
6 420, -45, -550 44 0.05
7 -264, -45, -640 40 0.10
8 -470, -45, -540 34 0.20
9 -557, -45, -430 54 0.01
10 -260, -60, -330 47 0.05
11 -500, -60, 330 42 0.06
12 428, -40, -283 33 0.20
13 409, -70, -230 57 0.00
14 450, -67, -300 63 0.00
15 -136, -65, -196 71 0.00
16 -561, -35, -547 45 0.00
17 667, -35, 317 43 0.00

Fish 16 and 17 are the loaches. They only appear on every fourth game. Fish 17 is child Link only.

Checklist for a custom pond

  1. Replace turibori_scene so the scene ID stays 0x49.
  2. Place one Fishing actor with the pond owner role. Its position does not matter. Do not place fish.
  3. Build the water as a circle around x = 0, z = 0 with a radius of about 920, and a floor that reaches about 135 units below the surface at the centre.
  4. Give the scene one water box with a surface height near -24, covering the whole pond. Put it first in the list.
  5. Leave the shore rising gently outside radius 920.
  6. Keep the shop area around z = 1200, with the door at about z = 1360.
  7. Do not model lily pads, reeds, rocks or posts. The actor adds them, with collision.

Where these numbers come from

Everything above was read from Ship of Harkinian's own source, in soh/src/overlays/actors/ovl_Fishing/z_fishing.c: the owner's coordinates in Fishing_Init, the fish list in sFishInits, the props in sPondPropInits, the water box lookup in the WATER_SURFACE_Y macro, and the radius 920 in the lure and fish updates. The vanilla water box values were read from a real oot.o2r. The scene ID checks are in z_parameter.c, z_actor.c, z_camera.c and z_player.c.