Skip to main content

Shared config, CLI, .parkobj, and object.json scaffolding for OpenRCT2 object generators.

Project description

OpenRCT2 Object Common

Shared scaffolding for the OpenRCT2 object generators. This package sits between the renderer and the generators, so the vehicle and scenery tools share one config layer, one CLI flow, and one .parkobj packaging path instead of each re-implementing them.

openrct2-x7-renderer        the Embree-backed iso renderer (meshes -> sprites)
        ▲
OpenRCT2-ObjectCommon        config, CLI, placement, object.json, .parkobj  ← you are here
        ▲
   ┌────┴─────┐
Vehicle      Scenery         the generators (+ their Blender add-ons)

Rendering is handled by the external openrct2-x7-renderer package (an Embree-backed ray tracer shipping prebuilt, vendored wheels), so this repo is pure Python, with no compiler or Embree needed.

Part of the OpenRCT2-Tools family — the renderer, VehicleGenerator, and SceneryGenerator all build on this package.

Requirements

  • Python ≥ 3.11
  • uv (recommended); uv sync pulls everything, including the renderer wheel from PyPI.

Develop

uv sync
uv run pytest        # coverage is enabled by default via pyproject.toml
uv run ruff check .
uv run mypy

What's here

Module What it provides
config parse_config (JSON/YAML) and the require_* / optional_* validation helpers; load_meshes / load_preview
cli run_cli (parse args → read config → resolve lights → render), make_context, parse_cli_args, output_directory_of
objectjson object_json_header — the id / originalId / version / authors / objectType block every object shares
placement add_model_to_scene and orientation_to_matrix — turn a Model into render-scene geometry
parkobj assemble_parkobj (render-or-reuse → write object.json → zip) and write_images_dat_lgx
blender.lights lights_from_items / default_lights — build the renderer's light rig from add-on UI items
blender.modal RenderModalBase — the off-main-thread modal render operator the add-ons subclass

Usage

CLI scaffolding

A generator's __main__ wires its loader/exporter into the shared flow:

from openrct2_object_common.cli import make_context, output_directory_of, run_cli


def _render(args, root, lights):
    obj = build_object(root)                       # generator-specific
    context = make_context(lights, obj.units_per_tile, args.test)
    export(obj, context, output_directory_of(root), skip_render=args.skip_render)


def main(argv=None):
    return run_cli("openrct2-my-generator", argv, _render)

Packaging a .parkobj

from openrct2_object_common.objectjson import object_json_header
from openrct2_object_common.parkobj import assemble_parkobj, write_images_dat_lgx


def export_to(obj, context, parkobj_path, work_dir, skip_render=False):
    obj_json = object_json_header(obj.id, object_type="scenery_small", authors=obj.authors)
    obj_json["properties"] = build_properties(obj)
    assemble_parkobj(
        obj_json, parkobj_path, work_dir,
        lambda wd: write_images_dat_lgx(render_sprites(obj, context), wd),
        skip_render=skip_render,
    )

Blender helpers

The blender subpackage imports bpy (blender.modal, blender.props, and blender.mesh_extractblender.lights does not), so install the extra when working with it outside Blender:

pip install "OpenRCT2-ObjectCommon[blender]"

License

GPL-3.0-or-later.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

openrct2_objectcommon-0.2.2.tar.gz (32.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

openrct2_objectcommon-0.2.2-py3-none-any.whl (25.3 kB view details)

Uploaded Python 3

File details

Details for the file openrct2_objectcommon-0.2.2.tar.gz.

File metadata

  • Download URL: openrct2_objectcommon-0.2.2.tar.gz
  • Upload date:
  • Size: 32.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for openrct2_objectcommon-0.2.2.tar.gz
Algorithm Hash digest
SHA256 84d3b0d51a4b2c093461a9e6e296cacdd92372eea5aeff7b5c013aa301a97610
MD5 c2d102d514a40ddd2dc37b2cb357c178
BLAKE2b-256 0128eb04c25e62e2503998df6fec13ef82a649cb4c76921f195dcefb22088a4e

See more details on using hashes here.

Provenance

The following attestation bundles were made for openrct2_objectcommon-0.2.2.tar.gz:

Publisher: publish.yml on alex-parisi/OpenRCT2-ObjectCommon

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file openrct2_objectcommon-0.2.2-py3-none-any.whl.

File metadata

File hashes

Hashes for openrct2_objectcommon-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 ac0217ef4ae516abcc1053f66451bfd8678e60fc7f3e4c55b9296c790a8db601
MD5 4a721430da736309ef97b83fc2a5fe74
BLAKE2b-256 e79cf20dc390f2c4060c321b6d209ec35bf5036adcf7ab0ffdf7bbb3c8058a32

See more details on using hashes here.

Provenance

The following attestation bundles were made for openrct2_objectcommon-0.2.2-py3-none-any.whl:

Publisher: publish.yml on alex-parisi/OpenRCT2-ObjectCommon

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page