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.4.tar.gz (33.4 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.4-py3-none-any.whl (25.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: openrct2_objectcommon-0.2.4.tar.gz
  • Upload date:
  • Size: 33.4 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.4.tar.gz
Algorithm Hash digest
SHA256 64200a6a2f62d104a364c0230ffe84249548143917604b1d3875d90083440a2a
MD5 5931aabfe8c655a7067c8578cb5ba8f7
BLAKE2b-256 f7793a6dfefd2644bcd3646596b16b9ebcc4d89833d28356df103d3eba75230a

See more details on using hashes here.

Provenance

The following attestation bundles were made for openrct2_objectcommon-0.2.4.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.4-py3-none-any.whl.

File metadata

File hashes

Hashes for openrct2_objectcommon-0.2.4-py3-none-any.whl
Algorithm Hash digest
SHA256 4723feaf12bbad9af469617f4c6bfebd4ee36e1954952bb964f7bfb383905cd0
MD5 8febe2b99bf416591e3b47d7e8b5d072
BLAKE2b-256 3e71f197c735d7b10b67ebfead42d0070f8b2fdf54adc96367c7374ed9405a5a

See more details on using hashes here.

Provenance

The following attestation bundles were made for openrct2_objectcommon-0.2.4-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