Browse docs

Bowling MLOs

Set up Sky Bowling and K4MB1, enable other supported halls, resolve map conflicts and configure your own bowling location.

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

LocationVenue IDLanesRequired started map resources
Sky Bowling — Del Perrosky_delperro7Included in sky_activities
Gabz Bowlinggabz8cfx-gabz-bowling
Breze Bowlingbreze8breze_bowling
Map4All Bowlingmap4all4map4all-bowling
K4MB1 Bowlingk4mb16k4mb1-bowling
G&N Memory Lanes — Cypress Flatsgn_cypress12cfx_gn_collection, cfx_gn_bowl_dlc, cfx_gn_bowling_cypress_flats
Prompt Studio — The Cornerprompt_corner6prompt_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/config.lua — Lua mode
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:

server.cfg
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/config.lua — Lua mode
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/bowling.lua — after the venue definitions
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.

  1. Back up your installation and disable BowlingLocations.sky_delperro in the effective settings source.
  2. Move the following files from sky_activities/stream/bowling/ to a backup directory outside all started resources. Moving them into another stream subfolder does not disable them.
PurposeFiles to exclude
Sky placement and hall collisionsky_bowl_delperro.ymap, sky_bowl_delperro.ybn, sky_bowl_entry_sign.ymap
Replaced GTA facade and distant modelsm_16_smbuild1.ydr, sm_16_slod1_children.ydd
Replaced GTA collision variantssm_16_0.ybn, hi@sm_16_0.ybn, hei_sm_16_0.ybn, hi@hei_sm_16_0.ybn
Replaced GTA occlusion variantssm_occl_03.ymap, hei_sm_occl_03.ymap
  1. 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, all sky_bowl_txd_*.ytd files, sky_bowling.ytyp, sky_bowling.ymf and the YTYP's DLC_ITYP_REQUEST manifest declaration. Other halls still need the common gameplay assets and their dependencies.
  2. 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.

FieldMeaning
label, origin, resourcesHall name, central world position used for proximity and required map resource names
machinesEnable 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[].pathOptional measured ball-return path; without it, the below-lane return is hidden before the ball reappears in the rack
lanes[].rackIndex of the rack used by this lane
lanes[].foul, yaw, headingWorld origin at the foul line, lane orientation in radians and player heading in degrees
lanes[].interaction, releaseWorld approach/menu point and throw-validation position
headPin, rear, halfWidth, gutterWidth, pinDeckHalfWidthLane/deck dimensions in metres; halfWidth is half the playable width
riseHeight difference between the foul line and head-pin foot
gutterdepth, endDepth, flatStart, flatEnd defining gutter depth and transition
pins[]Exactly ten pins, unique IDs 1–10, with lane-local x and y positions
screenWorld position, rotation in degrees (ZXY), width and height
interiorOptional 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:

Lane coordinates
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:

config/locales/en.lua — table entry
["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.