propkit.py: textured-GLB writer (TEXCOORD_0, shared external textures, MIRRORED_REPEAT). prop_author.py: parametric generators — ramps, rails, furniture, trees, dressing — each with local-space grind metadata and skatemakerpro element/collider hints. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
914 lines
13 KiB
JSON
914 lines
13 KiB
JSON
{
|
|
"name": "park_kit",
|
|
"version": "0.1",
|
|
"note": "Original GODVERSE park objects. props/ and textures/ must ship together (GLBs reference ../textures/*.jpg). grinds are prop-local segments \u2014 rotate/translate with the prop and append to the park rails list. element = matching skatemakerpro terrain kind for real collision.",
|
|
"textures": "MODELBEAST flux_local (flux2-klein-4b), original generations",
|
|
"props": [
|
|
{
|
|
"id": "qp_24",
|
|
"src": "props/qp_24.glb",
|
|
"category": "obstacle",
|
|
"desc": "plywood quarter pipe 4ft, steel coping",
|
|
"size": [
|
|
2.4,
|
|
1.25,
|
|
2.297
|
|
],
|
|
"tris": 124,
|
|
"grinds": [
|
|
{
|
|
"a": [
|
|
-1.2,
|
|
-1.697056274847714
|
|
],
|
|
"b": [
|
|
1.2,
|
|
-1.697056274847714
|
|
],
|
|
"ya": 1.22,
|
|
"yb": 1.22,
|
|
"kind": "rail"
|
|
}
|
|
],
|
|
"element": {
|
|
"kind": "quarter",
|
|
"len": 2.4,
|
|
"r0": 1.8,
|
|
"r1": 1.8,
|
|
"h": 1.2
|
|
}
|
|
},
|
|
{
|
|
"id": "qp_18",
|
|
"src": "props/qp_18.glb",
|
|
"category": "obstacle",
|
|
"desc": "mini quarter 3ft",
|
|
"size": [
|
|
1.8,
|
|
0.95,
|
|
1.873
|
|
],
|
|
"tris": 124,
|
|
"grinds": [
|
|
{
|
|
"a": [
|
|
-0.9,
|
|
-1.2727922061357857
|
|
],
|
|
"b": [
|
|
0.9,
|
|
-1.2727922061357857
|
|
],
|
|
"ya": 0.92,
|
|
"yb": 0.92,
|
|
"kind": "rail"
|
|
}
|
|
],
|
|
"element": {
|
|
"kind": "quarter",
|
|
"len": 1.8,
|
|
"r0": 1.35,
|
|
"r1": 1.35,
|
|
"h": 0.9
|
|
}
|
|
},
|
|
{
|
|
"id": "bank_12",
|
|
"src": "props/bank_12.glb",
|
|
"category": "obstacle",
|
|
"desc": "plywood wedge bank",
|
|
"size": [
|
|
2.4,
|
|
0.9,
|
|
2.2
|
|
],
|
|
"tris": 54,
|
|
"grinds": [
|
|
{
|
|
"a": [
|
|
-1.2,
|
|
0
|
|
],
|
|
"b": [
|
|
1.2,
|
|
0
|
|
],
|
|
"ya": 0.9,
|
|
"yb": 0.9,
|
|
"kind": "ledge"
|
|
}
|
|
],
|
|
"element": {
|
|
"kind": "bank",
|
|
"len": 2.4,
|
|
"h": 0.9,
|
|
"run": 1.8
|
|
}
|
|
},
|
|
{
|
|
"id": "kicker",
|
|
"src": "props/kicker.glb",
|
|
"category": "obstacle",
|
|
"desc": "curved plywood launch kicker",
|
|
"size": [
|
|
1.2,
|
|
0.45,
|
|
1.04
|
|
],
|
|
"tris": 56,
|
|
"element": {
|
|
"kind": "bank",
|
|
"len": 1.2,
|
|
"h": 0.45,
|
|
"run": 1.0
|
|
}
|
|
},
|
|
{
|
|
"id": "funbox_ply",
|
|
"src": "props/funbox_ply.glb",
|
|
"category": "obstacle",
|
|
"desc": "plywood funbox, banks both sides, steel edge caps",
|
|
"size": [
|
|
2.4,
|
|
0.6,
|
|
3.2
|
|
],
|
|
"tris": 68,
|
|
"grinds": [
|
|
{
|
|
"a": [
|
|
-1.2,
|
|
0.6
|
|
],
|
|
"b": [
|
|
1.2,
|
|
0.6
|
|
],
|
|
"ya": 0.6,
|
|
"yb": 0.6,
|
|
"kind": "ledge"
|
|
},
|
|
{
|
|
"a": [
|
|
-1.2,
|
|
-0.6
|
|
],
|
|
"b": [
|
|
1.2,
|
|
-0.6
|
|
],
|
|
"ya": 0.6,
|
|
"yb": 0.6,
|
|
"kind": "ledge"
|
|
}
|
|
],
|
|
"element": {
|
|
"kind": "funbox",
|
|
"hw": 1.2,
|
|
"hd": 0.6,
|
|
"h": 0.6,
|
|
"skirt": 1.0
|
|
}
|
|
},
|
|
{
|
|
"id": "spine_ply",
|
|
"src": "props/spine_ply.glb",
|
|
"category": "obstacle",
|
|
"desc": "plywood spine, double coping",
|
|
"size": [
|
|
2.4,
|
|
0.95,
|
|
2.746
|
|
],
|
|
"tris": 188,
|
|
"grinds": [
|
|
{
|
|
"a": [
|
|
-1.2,
|
|
0.1
|
|
],
|
|
"b": [
|
|
1.2,
|
|
0.1
|
|
],
|
|
"ya": 0.92,
|
|
"yb": 0.92,
|
|
"kind": "rail"
|
|
},
|
|
{
|
|
"a": [
|
|
-1.2,
|
|
-0.1
|
|
],
|
|
"b": [
|
|
1.2,
|
|
-0.1
|
|
],
|
|
"ya": 0.92,
|
|
"yb": 0.92,
|
|
"kind": "rail"
|
|
}
|
|
],
|
|
"element": {
|
|
"kind": "spine",
|
|
"len": 2.4,
|
|
"r": 1.35,
|
|
"h": 0.9
|
|
}
|
|
},
|
|
{
|
|
"id": "manual_pad",
|
|
"src": "props/manual_pad.glb",
|
|
"category": "obstacle",
|
|
"desc": "low concrete manual pad, steel edges",
|
|
"size": [
|
|
2.0,
|
|
0.28,
|
|
1.658
|
|
],
|
|
"tris": 60,
|
|
"grinds": [
|
|
{
|
|
"a": [
|
|
-1.0,
|
|
0.8
|
|
],
|
|
"b": [
|
|
1.0,
|
|
0.8
|
|
],
|
|
"ya": 0.28,
|
|
"yb": 0.28,
|
|
"kind": "ledge"
|
|
},
|
|
{
|
|
"a": [
|
|
-1.0,
|
|
-0.8
|
|
],
|
|
"b": [
|
|
1.0,
|
|
-0.8
|
|
],
|
|
"ya": 0.28,
|
|
"yb": 0.28,
|
|
"kind": "ledge"
|
|
}
|
|
],
|
|
"element": {
|
|
"kind": "funbox",
|
|
"hw": 1.0,
|
|
"hd": 0.8,
|
|
"h": 0.28,
|
|
"skirt": 0.3
|
|
}
|
|
},
|
|
{
|
|
"id": "ledge_concrete",
|
|
"src": "props/ledge_concrete.glb",
|
|
"category": "obstacle",
|
|
"desc": "concrete grind ledge, tagged side",
|
|
"size": [
|
|
2.4,
|
|
0.42,
|
|
0.508
|
|
],
|
|
"tris": 62,
|
|
"grinds": [
|
|
{
|
|
"a": [
|
|
-1.2,
|
|
0.225
|
|
],
|
|
"b": [
|
|
1.2,
|
|
0.225
|
|
],
|
|
"ya": 0.42,
|
|
"yb": 0.42,
|
|
"kind": "ledge"
|
|
},
|
|
{
|
|
"a": [
|
|
-1.2,
|
|
-0.225
|
|
],
|
|
"b": [
|
|
1.2,
|
|
-0.225
|
|
],
|
|
"ya": 0.42,
|
|
"yb": 0.42,
|
|
"kind": "ledge"
|
|
}
|
|
],
|
|
"collider": {
|
|
"type": "box",
|
|
"hw": 1.2,
|
|
"hd": 0.225,
|
|
"h": 0.42
|
|
},
|
|
"element": {
|
|
"kind": "ledge",
|
|
"hw": 1.2,
|
|
"hd": 0.225,
|
|
"h": 0.42
|
|
}
|
|
},
|
|
{
|
|
"id": "grindbox_ply",
|
|
"src": "props/grindbox_ply.glb",
|
|
"category": "obstacle",
|
|
"desc": "plywood grindbox: round bar one edge, angle the other",
|
|
"size": [
|
|
1.8,
|
|
0.448,
|
|
0.553
|
|
],
|
|
"tris": 68,
|
|
"grinds": [
|
|
{
|
|
"a": [
|
|
-0.9,
|
|
0.25
|
|
],
|
|
"b": [
|
|
0.9,
|
|
0.25
|
|
],
|
|
"ya": 0.42400000000000004,
|
|
"yb": 0.42400000000000004,
|
|
"kind": "rail"
|
|
},
|
|
{
|
|
"a": [
|
|
-0.9,
|
|
-0.25
|
|
],
|
|
"b": [
|
|
0.9,
|
|
-0.25
|
|
],
|
|
"ya": 0.4,
|
|
"yb": 0.4,
|
|
"kind": "ledge"
|
|
}
|
|
],
|
|
"element": {
|
|
"kind": "ledge",
|
|
"hw": 0.9,
|
|
"hd": 0.25,
|
|
"h": 0.4
|
|
}
|
|
},
|
|
{
|
|
"id": "rail_flat_3m",
|
|
"src": "props/rail_flat_3m.glb",
|
|
"category": "obstacle",
|
|
"desc": "round flat rail, 3m",
|
|
"size": [
|
|
3.0,
|
|
0.37,
|
|
0.12
|
|
],
|
|
"tris": 128,
|
|
"grinds": [
|
|
{
|
|
"a": [
|
|
-1.5,
|
|
0
|
|
],
|
|
"b": [
|
|
1.5,
|
|
0
|
|
],
|
|
"ya": 0.35,
|
|
"yb": 0.35,
|
|
"kind": "rail"
|
|
}
|
|
],
|
|
"collider": {
|
|
"type": "none"
|
|
}
|
|
},
|
|
{
|
|
"id": "rail_flat_6m",
|
|
"src": "props/rail_flat_6m.glb",
|
|
"category": "obstacle",
|
|
"desc": "round flat rail, 6m",
|
|
"size": [
|
|
6.0,
|
|
0.47,
|
|
0.12
|
|
],
|
|
"tris": 172,
|
|
"grinds": [
|
|
{
|
|
"a": [
|
|
-3.0,
|
|
0
|
|
],
|
|
"b": [
|
|
3.0,
|
|
0
|
|
],
|
|
"ya": 0.45,
|
|
"yb": 0.45,
|
|
"kind": "rail"
|
|
}
|
|
],
|
|
"collider": {
|
|
"type": "none"
|
|
}
|
|
},
|
|
{
|
|
"id": "rail_kink",
|
|
"src": "props/rail_kink.glb",
|
|
"category": "obstacle",
|
|
"desc": "kinked down rail: flat then slope",
|
|
"size": [
|
|
3.206,
|
|
0.57,
|
|
0.12
|
|
],
|
|
"tris": 192,
|
|
"grinds": [
|
|
{
|
|
"a": [
|
|
-1.6,
|
|
0
|
|
],
|
|
"b": [
|
|
0.2,
|
|
0
|
|
],
|
|
"ya": 0.55,
|
|
"yb": 0.55,
|
|
"kind": "rail"
|
|
},
|
|
{
|
|
"a": [
|
|
0.2,
|
|
0
|
|
],
|
|
"b": [
|
|
1.6,
|
|
0
|
|
],
|
|
"ya": 0.55,
|
|
"yb": 0.1,
|
|
"kind": "rail"
|
|
}
|
|
],
|
|
"collider": {
|
|
"type": "none"
|
|
}
|
|
},
|
|
{
|
|
"id": "rail_rainbow",
|
|
"src": "props/rail_rainbow.glb",
|
|
"category": "obstacle",
|
|
"desc": "rainbow rail arc",
|
|
"size": [
|
|
3.4,
|
|
0.82,
|
|
0.14
|
|
],
|
|
"tris": 244,
|
|
"grinds": [
|
|
{
|
|
"a": [
|
|
-1.6,
|
|
0
|
|
],
|
|
"b": [
|
|
0,
|
|
0
|
|
],
|
|
"ya": 0.06,
|
|
"yb": 0.8,
|
|
"kind": "rail"
|
|
},
|
|
{
|
|
"a": [
|
|
0,
|
|
0
|
|
],
|
|
"b": [
|
|
1.6,
|
|
0
|
|
],
|
|
"ya": 0.8,
|
|
"yb": 0.06,
|
|
"kind": "rail"
|
|
}
|
|
],
|
|
"collider": {
|
|
"type": "none"
|
|
}
|
|
},
|
|
{
|
|
"id": "pipe_full",
|
|
"src": "props/pipe_full.glb",
|
|
"category": "obstacle",
|
|
"desc": "concrete full pipe, graffiti bombed outside",
|
|
"size": [
|
|
3.0,
|
|
3.65,
|
|
3.8
|
|
],
|
|
"tris": 192,
|
|
"collider": {
|
|
"type": "box",
|
|
"hw": 1.5,
|
|
"hd": 1.9,
|
|
"h": 3.8
|
|
}
|
|
},
|
|
{
|
|
"id": "bench_park",
|
|
"src": "props/bench_park.glb",
|
|
"category": "furniture",
|
|
"desc": "timber slat park bench, steel frame",
|
|
"size": [
|
|
1.8,
|
|
0.866,
|
|
0.638
|
|
],
|
|
"tris": 276,
|
|
"grinds": [
|
|
{
|
|
"a": [
|
|
-0.9,
|
|
0.25
|
|
],
|
|
"b": [
|
|
0.9,
|
|
0.25
|
|
],
|
|
"ya": 0.45,
|
|
"yb": 0.45,
|
|
"kind": "ledge"
|
|
},
|
|
{
|
|
"a": [
|
|
-0.9,
|
|
-0.36
|
|
],
|
|
"b": [
|
|
0.9,
|
|
-0.36
|
|
],
|
|
"ya": 0.86,
|
|
"yb": 0.86,
|
|
"kind": "rail"
|
|
}
|
|
],
|
|
"collider": {
|
|
"type": "box",
|
|
"hw": 0.9,
|
|
"hd": 0.35,
|
|
"h": 0.45
|
|
}
|
|
},
|
|
{
|
|
"id": "bench_concrete",
|
|
"src": "props/bench_concrete.glb",
|
|
"category": "furniture",
|
|
"desc": "concrete bench block, tagged",
|
|
"size": [
|
|
1.8,
|
|
0.45,
|
|
0.452
|
|
],
|
|
"tris": 14,
|
|
"grinds": [
|
|
{
|
|
"a": [
|
|
-0.9,
|
|
0.225
|
|
],
|
|
"b": [
|
|
0.9,
|
|
0.225
|
|
],
|
|
"ya": 0.45,
|
|
"yb": 0.45,
|
|
"kind": "ledge"
|
|
},
|
|
{
|
|
"a": [
|
|
-0.9,
|
|
-0.225
|
|
],
|
|
"b": [
|
|
0.9,
|
|
-0.225
|
|
],
|
|
"ya": 0.45,
|
|
"yb": 0.45,
|
|
"kind": "ledge"
|
|
}
|
|
],
|
|
"collider": {
|
|
"type": "box",
|
|
"hw": 0.9,
|
|
"hd": 0.225,
|
|
"h": 0.45
|
|
},
|
|
"element": {
|
|
"kind": "ledge",
|
|
"hw": 0.9,
|
|
"hd": 0.225,
|
|
"h": 0.45
|
|
}
|
|
},
|
|
{
|
|
"id": "picnic_table",
|
|
"src": "props/picnic_table.glb",
|
|
"category": "furniture",
|
|
"desc": "timber A-frame picnic table",
|
|
"size": [
|
|
1.8,
|
|
0.78,
|
|
2.325
|
|
],
|
|
"tris": 240,
|
|
"grinds": [
|
|
{
|
|
"a": [
|
|
-0.9,
|
|
0.4
|
|
],
|
|
"b": [
|
|
0.9,
|
|
0.4
|
|
],
|
|
"ya": 0.78,
|
|
"yb": 0.78,
|
|
"kind": "ledge"
|
|
},
|
|
{
|
|
"a": [
|
|
-0.9,
|
|
-0.4
|
|
],
|
|
"b": [
|
|
0.9,
|
|
-0.4
|
|
],
|
|
"ya": 0.78,
|
|
"yb": 0.78,
|
|
"kind": "ledge"
|
|
}
|
|
],
|
|
"collider": {
|
|
"type": "box",
|
|
"hw": 0.9,
|
|
"hd": 0.85,
|
|
"h": 0.78
|
|
}
|
|
},
|
|
{
|
|
"id": "bin_council",
|
|
"src": "props/bin_council.glb",
|
|
"category": "furniture",
|
|
"desc": "council park bin, dark green",
|
|
"size": [
|
|
0.61,
|
|
1.02,
|
|
0.595
|
|
],
|
|
"tris": 252,
|
|
"collider": {
|
|
"type": "cylinder",
|
|
"r": 0.32,
|
|
"h": 1.02
|
|
}
|
|
},
|
|
{
|
|
"id": "bollard_steel",
|
|
"src": "props/bollard_steel.glb",
|
|
"category": "furniture",
|
|
"desc": "galvanised bollard",
|
|
"size": [
|
|
0.16,
|
|
0.93,
|
|
0.16
|
|
],
|
|
"tris": 96,
|
|
"collider": {
|
|
"type": "cylinder",
|
|
"r": 0.1,
|
|
"h": 0.93
|
|
}
|
|
},
|
|
{
|
|
"id": "railing_ped_2m",
|
|
"src": "props/railing_ped_2m.glb",
|
|
"category": "furniture",
|
|
"desc": "pedestrian railing, 2m module",
|
|
"size": [
|
|
2.04,
|
|
1.024,
|
|
0.14
|
|
],
|
|
"tris": 152,
|
|
"grinds": [
|
|
{
|
|
"a": [
|
|
-1.0,
|
|
0
|
|
],
|
|
"b": [
|
|
1.0,
|
|
0
|
|
],
|
|
"ya": 1.0,
|
|
"yb": 1.0,
|
|
"kind": "rail"
|
|
}
|
|
],
|
|
"collider": {
|
|
"type": "none"
|
|
}
|
|
},
|
|
{
|
|
"id": "planter_box",
|
|
"src": "props/planter_box.glb",
|
|
"category": "furniture",
|
|
"desc": "brick planter, concrete cap, gum sapling",
|
|
"size": [
|
|
1.28,
|
|
1.95,
|
|
0.989
|
|
],
|
|
"tris": 140,
|
|
"grinds": [
|
|
{
|
|
"a": [
|
|
-0.64,
|
|
0.29
|
|
],
|
|
"b": [
|
|
0.64,
|
|
0.29
|
|
],
|
|
"ya": 0.5,
|
|
"yb": 0.5,
|
|
"kind": "ledge"
|
|
},
|
|
{
|
|
"a": [
|
|
-0.64,
|
|
-0.29
|
|
],
|
|
"b": [
|
|
0.64,
|
|
-0.29
|
|
],
|
|
"ya": 0.5,
|
|
"yb": 0.5,
|
|
"kind": "ledge"
|
|
}
|
|
],
|
|
"collider": {
|
|
"type": "box",
|
|
"hw": 0.64,
|
|
"hd": 0.29,
|
|
"h": 0.5
|
|
}
|
|
},
|
|
{
|
|
"id": "kerb_3m",
|
|
"src": "props/kerb_3m.glb",
|
|
"category": "dressing",
|
|
"desc": "kerb + gutter strip \u2014 slappy central",
|
|
"size": [
|
|
3.0,
|
|
0.15,
|
|
1.65
|
|
],
|
|
"tris": 36,
|
|
"grinds": [
|
|
{
|
|
"a": [
|
|
-1.5,
|
|
0
|
|
],
|
|
"b": [
|
|
1.5,
|
|
0
|
|
],
|
|
"ya": 0.15,
|
|
"yb": 0.15,
|
|
"kind": "ledge"
|
|
}
|
|
],
|
|
"collider": {
|
|
"type": "none"
|
|
}
|
|
},
|
|
{
|
|
"id": "wall_graffiti",
|
|
"src": "props/wall_graffiti.glb",
|
|
"category": "dressing",
|
|
"desc": "freestanding graffiti wall \u2014 wallride bait",
|
|
"size": [
|
|
3.6,
|
|
1.8,
|
|
0.256
|
|
],
|
|
"tris": 16,
|
|
"grinds": [
|
|
{
|
|
"a": [
|
|
-1.8,
|
|
0
|
|
],
|
|
"b": [
|
|
1.8,
|
|
0
|
|
],
|
|
"ya": 1.8,
|
|
"yb": 1.8,
|
|
"kind": "ledge"
|
|
}
|
|
],
|
|
"collider": {
|
|
"type": "box",
|
|
"hw": 1.8,
|
|
"hd": 0.125,
|
|
"h": 1.8
|
|
}
|
|
},
|
|
{
|
|
"id": "shade_sail",
|
|
"src": "props/shade_sail.glb",
|
|
"category": "dressing",
|
|
"desc": "council shade sail on galv posts",
|
|
"size": [
|
|
4.71,
|
|
3.403,
|
|
3.91
|
|
],
|
|
"tris": 168,
|
|
"collider": {
|
|
"type": "cylinder",
|
|
"r": 0.1,
|
|
"h": 3.2
|
|
}
|
|
},
|
|
{
|
|
"id": "tree_fig",
|
|
"src": "props/tree_fig.glb",
|
|
"category": "vegetation",
|
|
"desc": "Moreton Bay fig \u2014 buttress roots, huge canopy",
|
|
"size": [
|
|
9.36,
|
|
5.9,
|
|
7.57
|
|
],
|
|
"tris": 686,
|
|
"collider": {
|
|
"type": "cylinder",
|
|
"r": 0.85,
|
|
"h": 2.8
|
|
}
|
|
},
|
|
{
|
|
"id": "tree_gum",
|
|
"src": "props/tree_gum.glb",
|
|
"category": "vegetation",
|
|
"desc": "eucalypt \u2014 pale mottled trunk, sparse crown",
|
|
"size": [
|
|
5.339,
|
|
7.106,
|
|
3.848
|
|
],
|
|
"tris": 498,
|
|
"collider": {
|
|
"type": "cylinder",
|
|
"r": 0.32,
|
|
"h": 5.6
|
|
}
|
|
},
|
|
{
|
|
"id": "mound_dirt",
|
|
"src": "props/mound_dirt.glb",
|
|
"category": "dressing",
|
|
"desc": "dirt jump mound \u2014 ridable",
|
|
"size": [
|
|
4.4,
|
|
0.55,
|
|
4.4
|
|
],
|
|
"tris": 200,
|
|
"element": {
|
|
"kind": "mogul",
|
|
"h": 0.55,
|
|
"s": 1.4
|
|
}
|
|
}
|
|
]
|
|
} |