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.1.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.1-py3-none-any.whl (25.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: openrct2_objectcommon-0.2.1.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.1.tar.gz
Algorithm Hash digest
SHA256 c3b9ed88163bd4826a9c3f60f5c3e5c12d2dd328e0b001efafd87b383e7c67e2
MD5 be09d835c87541293c8a01e47c90382f
BLAKE2b-256 98e423334bdd249193a1619ca786bc23ccfefa3ff55c2817cc07b16344dcd1c7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for openrct2_objectcommon-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8a0ec720632d9a04c4096ba13b64ad262651fa45efffca3d4b95227673f4bc6e
MD5 97385bd9b6f8eb43d53dc8049294b589
BLAKE2b-256 4f9f0b9fef1507020fa200457c9e26cacd505965825fc3d8d29671701379c9fe

See more details on using hashes here.

Provenance

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