Browse docs
Bowling MLOs
Sky Activities supplies the bowling gameplay and its own Sky Del Perro hall. Third-party MLOs are purchased and installed separately. Their bowling gameplay scripts are not required and should not control the same lanes alongside Sky Activities.
Supported locations
| Location | Venue ID | Lanes | Required started map resources |
|---|---|---|---|
| Sky Bowling — Del Perro | sky_delperro | 7 | Included in sky_activities |
| Gabz Bowling | gabz | 8 | cfx-gabz-bowling |
| Breze Bowling | breze | 8 | breze_bowling |
| Map4All Bowling | map4all | 4 | map4all-bowling |
| K4MB1 Bowling | k4mb1 | 6 | k4mb1-bowling |
| G&N Memory Lanes — Cypress Flats | gn_cypress | 12 | cfx_gn_collection, cfx_gn_bowl_dlc, cfx_gn_bowling_cypress_flats |
| Prompt Studio — The Corner | prompt_corner | 6 | prompt_sandy_corner |
These presets provide 51 lanes across seven locations. RTX Bowling 1 and 2 are not included. Some coordinates were imported from an RTX-format reference, but this does not introduce a dependency on RTX gameplay.
Set up Sky Bowling
Keep the included stream/bowling files and their manifest declarations. Enable Bowling globally and the Sky Del Perro location. There is no separate Sky map package or additional Sky bowling resource to start.
In the default editor mode, use /activitiesconfig → General settings → Bowling and save. In Lua mode (Config.UseActivitiesConfig = false), edit the existing values and restart:
Config.EnableBowling = true
Config.BowlingLocations.sky_delperro = true
Visit the hall and use a lane's interaction and ball return. The Bowling guide covers the player controls.
Set up K4MB1
Install the map
Install your K4MB1 Bowling MLO and its required dependencies following the map author's instructions. Keep the expected resource name k4mb1-bowling, or update its configured name as described below.
Resolve the Del Perro overlap
K4MB1's Del Perro variant can overlap the included Sky hall and world patches. Disable the Sky location and follow Replace the Sky Del Perro building before testing the replacement. A gameplay switch by itself does not remove streamed geometry.
Start and enable the location
After the normal Sky dependencies, start the map before Activities:
ensure k4mb1-bowling
ensure sky_activities
In editor mode, enable Bowling and K4MB1 in the Bowling settings group. In Lua mode, edit the existing values:
Config.EnableBowling = true
Config.BowlingLocations.k4mb1 = true
Config.BowlingLocations.sky_delperro = false
Check all six lanes
Test the approach, ball pickup, pins, gutters and scoreboard on each lane. K4MB1's preset uses machines = false: Sky does not impose its machine animation on that map. The imported fourth lane includes the missing head pin reconstructed from the parallel lane's geometry.
Resource detection and switches
config/bowling.lua contains Config.BowlingVenues. Every entry in a venue's resources list must be started before the hall becomes available. This list contains required resources, not alternative aliases.
For a renamed K4MB1 installation, replace the existing resource name in its preset. For example, if the installed folder is named my_k4mb1_bowling:
Config.BowlingVenues.k4mb1.resources = { "my_k4mb1_bowling" }
Restart Activities after changing geometry or resource names. Keep the stable venue ID k4mb1; its saved switch and gameplay identity use that ID.
All seven location switches default to enabled, but missing third-party maps remain unavailable. EnableBowling is the master switch. BowlingLocations.<id> enables an individual hall. These switches follow the selected settings source.
Map start/stop and saved settings changes update availability. Turning off a hall ends its games, clears its memberships and spectators, resets its ball stock and releases its client presentation. Other halls continue independently. Re-enabling starts fresh availability, not a continuation of the ended games.
Replace the Sky Del Perro building
Use this procedure when another installed map occupies the same building or conflicts with Sky's Del Perro world patches. Check the actual map version and any other resource replacing those files.
- Back up your installation and disable
BowlingLocations.sky_delperroin the effective settings source. - Move the following files from
sky_activities/stream/bowling/to a backup directory outside all started resources. Moving them into anotherstreamsubfolder does not disable them.
| Purpose | Files to exclude |
|---|---|
| Sky placement and hall collision | sky_bowl_delperro.ymap, sky_bowl_delperro.ybn, sky_bowl_entry_sign.ymap |
| Replaced GTA facade and distant model | sm_16_smbuild1.ydr, sm_16_slod1_children.ydd |
| Replaced GTA collision variants | sm_16_0.ybn, hi@sm_16_0.ybn, hei_sm_16_0.ybn, hi@hei_sm_16_0.ybn |
| Replaced GTA occlusion variants | sm_occl_03.ymap, hei_sm_occl_03.ymap |
- Keep the rest of the bowling folder. In particular, retain
sky_bowl_ball.ydr,sky_bowl_pin.ydr,sky_bowl_sweep.ydr,sky_bowl_table.ydr, allsky_bowl_txd_*.ytdfiles,sky_bowling.ytyp,sky_bowling.ymfand the YTYP'sDLC_ITYP_REQUESTmanifest declaration. Other halls still need the common gameplay assets and their dependencies. - Reload the affected resources, reconnect test clients and inspect the building, collision and visibility from inside and outside.
Record these exclusions and reapply them after an update that restores the original Sky files. Do not remove the entire bowling folder or its YTYP registration.
Other MLO requirements
For G&N, all three listed resources are required. The integration handles the bowling pins, pinsetter and ball-return entity sets in int_gn_bowl_01 and restores the sets it found active when leaving. Avoid another script forcing conflicting decoration states while Activities uses the hall.
For The Corner, install the Sandy mapdata required by its author as well as prompt_sandy_corner. Follow the G&N Memory Lanes installation and The Corner installation for their map-specific prerequisites.
Each lane has its own scoreboard surface. Third-party displays do not rely on replacing one shared MLO texture with every lane's score. Display position, facing and size still need to match the installed map version.
Add your own bowling location
Copy a complete third-party entry in config/bowling.lua under a new, stable Config.BowlingVenues key. Use letters, digits and underscores, for example my_bowling. Replace the copied geometry with measured data from your own map; do not leave another hall's positions in place.
| Field | Meaning |
|---|---|
label, origin, resources | Hall name, central world position used for proximity and required map resource names |
machines | Enable only when the map fits the supplied Sky machine movements |
racks[].pickup, racks[].slots[] | World pickup point and ball-center positions in each rack |
racks[].path | Optional measured ball-return path; without it, the below-lane return is hidden before the ball reappears in the rack |
lanes[].rack | Index of the rack used by this lane |
lanes[].foul, yaw, heading | World origin at the foul line, lane orientation in radians and player heading in degrees |
lanes[].interaction, release | World approach/menu point and throw-validation position |
headPin, rear, halfWidth, gutterWidth, pinDeckHalfWidth | Lane/deck dimensions in metres; halfWidth is half the playable width |
rise | Height difference between the foul line and head-pin foot |
gutter | depth, endDepth, flatStart, flatEnd defining gutter depth and transition |
pins[] | Exactly ten pins, unique IDs 1–10, with lane-local x and y positions |
screen | World position, rotation in degrees (ZXY), width and height |
interior | Optional interior lookup data and disableSets for conflicting decoration |
hideModels[] | Optional exact decorative model names, world positions and tightly scoped radii |
Lane numbers run from 1 within each hall. Local positive Y points toward the pins. The lane-to-world conversion is:
worldX = foul.x + x * cos(yaw) + y * sin(yaw)
worldY = foul.y + x * sin(yaw) - y * cos(yaw)
floorZ = foul.z + rise * y / headPin
Sky pin origins are at the foot; ball positions use the ball center. Do not copy another script's model-center heights directly into floor coordinates. rear must extend beyond the pins, every pin must fit inside the deck, and every lane must reference an existing rack with at least one slot.
A new venue gets a location switch in the existing settings schema on startup. Add Config.BowlingLocations.my_bowling = true to the Lua operator settings if you use Lua mode. For its translated settings label, add bowlingVenue_my_bowling to the language tables in config/locales/en.lua and config/locales/de.lua. For example, inside the existing English table:
["bowlingVenue_my_bowling"] = "My Bowling Hall",
In editor mode, manage the new switch through /activitiesconfig after restarting. A new location defaults to enabled but still requires its map resources. Do not copy another bowling script's fees, framework configuration, object handles or scoring rules into the geometry entry.
Verify the installed map version
Preset geometry and independent hall state have automated coverage. The third-party MLOs were not installed in the development environment for an in-game visual acceptance test. Check your installed versions for approach height, pin alignment, lane/gutter width, duplicate decoration, screen facing/size, machine clearance and ball-return positions.
Run simultaneous games on identically numbered lanes in two different halls, then stop/restart one hall and confirm the other is unaffected. Check with real players and your enabled anticheat before opening the location publicly.