Reference
Shirt cuts
A shirt cut for the kit designer: a blank white shirt photographed front and back (the shading layer), with region masks traced onto each. The renderer fills each region with its colour and lays the shading over it.
- Content type
shirtCuts- Files
data/kit/shirt-bases.json,data/kit/shirt-bases/- Shape
- A list of records, each with its own
id - Patch target
shirtCut:<id>, for exampleshirtCut:core.shirt-cut.crew- In the base game
- 3 records
- Guide
- Equipment, kit and signature development
Fields#
Indented fields belong to the field above them. [] marks the items of a list. A field that is not required may be left out; the default is used.
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
id | id | Yes | Namespaced id, e.g. "core.player.rory-calder" | |
name | text, up to 40 characters | Yes | ||
collars | list | [] | Collar styles drawn on this cut (crew, polo, button, vneck). | |
frontImage | file path | Yes | Square base images (transparent background), front and back. | |
backImage | file path | Yes | A file in your pack: see Images, sound and models. | |
size | whole number, 64 to 4096 | 1024 | The pixel size the region paths and print spots are drawn in. | |
front | object | Yes | ||
front.regions | object | Yes | ||
front.regions.sleeveL | text, up to 20,000 characters | |||
front.regions.sleeveR | text, up to 20,000 characters | |||
front.regions.cuffL | text, up to 20,000 characters | |||
front.regions.cuffR | text, up to 20,000 characters | |||
front.regions.collar | text, up to 20,000 characters | |||
front.regions.inner | text, up to 20,000 characters | |||
front.regions.placket | text, up to 20,000 characters | |||
front.regions.sideL | text, up to 20,000 characters | |||
front.regions.sideR | text, up to 20,000 characters | |||
front.print | object | Yes | ||
front.print.chest | object | |||
front.print.chest.x | number | Yes | ||
front.print.chest.y | number | Yes | ||
front.print.chest.w | number, at least 0 | Yes | ||
front.print.chest.h | number, at least 0 | Yes | ||
front.print.chest.rotate | number, -90 to 90 | 0 | ||
front.print.crest | object | |||
front.print.crest.x | number | Yes | ||
front.print.crest.y | number | Yes | ||
front.print.crest.w | number, at least 0 | Yes | ||
front.print.crest.h | number, at least 0 | Yes | ||
front.print.crest.rotate | number, -90 to 90 | 0 | ||
front.print.sleeveL | object | |||
front.print.sleeveL.x | number | Yes | ||
front.print.sleeveL.y | number | Yes | ||
front.print.sleeveL.w | number, at least 0 | Yes | ||
front.print.sleeveL.h | number, at least 0 | Yes | ||
front.print.sleeveL.rotate | number, -90 to 90 | 0 | ||
front.print.sleeveR | object | |||
front.print.sleeveR.x | number | Yes | ||
front.print.sleeveR.y | number | Yes | ||
front.print.sleeveR.w | number, at least 0 | Yes | ||
front.print.sleeveR.h | number, at least 0 | Yes | ||
front.print.sleeveR.rotate | number, -90 to 90 | 0 | ||
front.print.flag | object | |||
front.print.flag.x | number | Yes | ||
front.print.flag.y | number | Yes | ||
front.print.flag.w | number, at least 0 | Yes | ||
front.print.flag.h | number, at least 0 | Yes | ||
front.print.flag.rotate | number, -90 to 90 | 0 | ||
front.print.back | object | |||
front.print.back.x | number | Yes | ||
front.print.back.y | number | Yes | ||
front.print.back.w | number, at least 0 | Yes | ||
front.print.back.h | number, at least 0 | Yes | ||
front.print.back.rotate | number, -90 to 90 | 0 | ||
front.print.name | object | |||
front.print.name.x | number | Yes | ||
front.print.name.y | number | Yes | ||
front.print.name.w | number, at least 0 | Yes | ||
front.print.name.h | number, at least 0 | Yes | ||
front.print.name.rotate | number, -90 to 90 | 0 | ||
front.print.number | object | |||
front.print.number.x | number | Yes | ||
front.print.number.y | number | Yes | ||
front.print.number.w | number, at least 0 | Yes | ||
front.print.number.h | number, at least 0 | Yes | ||
front.print.number.rotate | number, -90 to 90 | 0 | ||
front.print.placket | object | |||
front.print.placket.x | number | Yes | ||
front.print.placket.y | number | Yes | ||
front.print.placket.w | number, at least 0 | Yes | ||
front.print.placket.h | number, at least 0 | Yes | ||
front.print.placket.rotate | number, -90 to 90 | 0 | ||
back | object | Yes | ||
back.regions | object | Yes | ||
back.regions.sleeveL | text, up to 20,000 characters | |||
back.regions.sleeveR | text, up to 20,000 characters | |||
back.regions.cuffL | text, up to 20,000 characters | |||
back.regions.cuffR | text, up to 20,000 characters | |||
back.regions.collar | text, up to 20,000 characters | |||
back.regions.inner | text, up to 20,000 characters | |||
back.regions.placket | text, up to 20,000 characters | |||
back.regions.sideL | text, up to 20,000 characters | |||
back.regions.sideR | text, up to 20,000 characters | |||
back.print | object | Yes | ||
back.print.chest | object | |||
back.print.chest.x | number | Yes | ||
back.print.chest.y | number | Yes | ||
back.print.chest.w | number, at least 0 | Yes | ||
back.print.chest.h | number, at least 0 | Yes | ||
back.print.chest.rotate | number, -90 to 90 | 0 | ||
back.print.crest | object | |||
back.print.crest.x | number | Yes | ||
back.print.crest.y | number | Yes | ||
back.print.crest.w | number, at least 0 | Yes | ||
back.print.crest.h | number, at least 0 | Yes | ||
back.print.crest.rotate | number, -90 to 90 | 0 | ||
back.print.sleeveL | object | |||
back.print.sleeveL.x | number | Yes | ||
back.print.sleeveL.y | number | Yes | ||
back.print.sleeveL.w | number, at least 0 | Yes | ||
back.print.sleeveL.h | number, at least 0 | Yes | ||
back.print.sleeveL.rotate | number, -90 to 90 | 0 | ||
back.print.sleeveR | object | |||
back.print.sleeveR.x | number | Yes | ||
back.print.sleeveR.y | number | Yes | ||
back.print.sleeveR.w | number, at least 0 | Yes | ||
back.print.sleeveR.h | number, at least 0 | Yes | ||
back.print.sleeveR.rotate | number, -90 to 90 | 0 | ||
back.print.flag | object | |||
back.print.flag.x | number | Yes | ||
back.print.flag.y | number | Yes | ||
back.print.flag.w | number, at least 0 | Yes | ||
back.print.flag.h | number, at least 0 | Yes | ||
back.print.flag.rotate | number, -90 to 90 | 0 | ||
back.print.back | object | |||
back.print.back.x | number | Yes | ||
back.print.back.y | number | Yes | ||
back.print.back.w | number, at least 0 | Yes | ||
back.print.back.h | number, at least 0 | Yes | ||
back.print.back.rotate | number, -90 to 90 | 0 | ||
back.print.name | object | |||
back.print.name.x | number | Yes | ||
back.print.name.y | number | Yes | ||
back.print.name.w | number, at least 0 | Yes | ||
back.print.name.h | number, at least 0 | Yes | ||
back.print.name.rotate | number, -90 to 90 | 0 | ||
back.print.number | object | |||
back.print.number.x | number | Yes | ||
back.print.number.y | number | Yes | ||
back.print.number.w | number, at least 0 | Yes | ||
back.print.number.h | number, at least 0 | Yes | ||
back.print.number.rotate | number, -90 to 90 | 0 | ||
back.print.placket | object | |||
back.print.placket.x | number | Yes | ||
back.print.placket.y | number | Yes | ||
back.print.placket.w | number, at least 0 | Yes | ||
back.print.placket.h | number, at least 0 | Yes | ||
back.print.placket.rotate | number, -90 to 90 | 0 |
Example#
A record from the base game’s data/kit/shirt-bases.json, shortened.
{
"id": "core.shirt-cut.crew",
"name": "Crew neck",
"collars": [
"crew",
"button"
],
"frontImage": "assets/kit/shirts/crew-front.webp",
"backImage": "assets/kit/shirts/crew-back.webp",
"size": 1024,
"front": {
"regions": {
"sleeveL": "M190 0 213 129 214 134 216 139 217 144 219 149 221 154 222 159 224 164 226 169 227 174 228 179 230 184 230 190 231 194 232 200 234 205 235 210 235 215 236 220 237 225 238 230 240 235 241 240 242 245 2…",
"sleeveR": "M834 0 807 128 806 133 805 138 804 143 802 148 801 154 800 159 799 164 798 169 796 174 795 179 794 184 793 189 792 194 791 199 789 204 788 209 787 214 786 220 785 225 784 230 782 235 781 240 780 245 7…",
"cuffL": "M60 388 112 399 118 401 125 402 130 403 135 404 140 406 145 407 150 408 155 410 160 411 164 412 169 414 174 415 179 416 184 417 189 418 194 419 199 420 204 422 209 423 214 424 219 425 224 426 229 426 …",
"cuffR": "M964 388 912 399 906 401 899 402 894 403 889 404 884 406 879 407 874 408 869 409 864 411 860 412 854 413 850 414 845 415 840 417 835 418 830 419 825 420 820 421 815 422 810 423 805 424 800 425 795 426…",
"collar": "M370 0 379 55 379 62 380 69 381 76 384 83 388 90 392 97 397 103 400 106 403 109 406 112 409 115 413 118 416 120 420 123 424 126 428 128 433 130 437 132 441 134 446 136 451 138 456 139 460 140 465 142 …",
"inner": "M408 58 413 62 414 67 415 72 417 77 421 82 425 87 431 92 437 96 441 98 445 100 449 102 453 104 457 105 462 107 466 108 471 109 476 110 481 111 486 112 491 113 496 114 501 114 507 114 512 114 517 114 5…",
"sideL": "M150 460 325 460 327 472 328 484 329 496 331 508 332 520 333 532 331 544 329 556 329 568 329 580 331 592 333 604 336 616 338 628 338 640 337 652 336 664 334 676 331 688 330 700 329 712 329 724 329 736…",
"sideR": "M874 460 698 460 696 472 695 484 694 496 692 508 691 520 690 532 688 544 690 556 692 568 694 580 694 592 693 604 692 616 690 628 688 640 685 652 685 664 685 676 688 688 691 700 693 712 694 724 695 736…"
},
"print": {
"chest": {
"x": 512,
"y": 310,
"w": 380,
"h": 176
},
"crest": {
"x": 624,
"y": 212,
"w": 62,
"h": 72
},
"sleeveL": {
"x": 196,
"y": 280,
"w": 96,
"h": 66,
"rotate": -4
},
"sleeveR": {
"x": 828,
"y": 280,
"w": 96,
"h": 66,
"rotate": 4
},
"flag": {
"x": 826,
"y": 356,
"w": 42,
"h": 28,
"rotate": 6
},
"placket": {
"x": 512,
"y": 196,
"w": 44,
"h": 150
}
}
},
"back": {
"regions": {
"sleeveL": "M203 0 228 135 229 140 230 145 230 150 232 155 233 160 233 165 234 170 234 175 235 180 235 185 236 190 236 196 237 201 237 206 238 211 240 216 241 221 242 226 243 231 245 236 246 241 248 246 250 251 2…",
"sleeveR": "M822 0 799 135 797 140 796 145 794 150 792 155 790 160 788 164 787 169 786 174 785 179 784 184 783 189 783 194 783 200 782 205 782 210 782 215 782 220 781 226 780 230 778 235 777 240 776 245 774 250 7…",
"cuffL": "M40 390 110 402 116 403 122 405 128 406 133 408 138 410 143 411 148 413 153 415 158 417 163 418 168 419 173 420 178 422 184 423 189 425 194 426 199 428 204 429 209 431 214 432 219 434 224 435 229 436 …",
"cuffR": "M984 390 914 403 909 404 903 406 897 407 893 409 888 411 884 413 879 415 874 417 869 419 864 420 860 421 855 422 850 423 845 424 840 424 835 425 830 426 825 428 820 429 815 431 810 432 805 433 800 435…",
"collar": "M380 0 386 40 387 45 389 50 391 56 397 57 402 58 408 59 413 60 418 61 424 62 429 63 434 64 440 64 445 65 450 65 455 66 460 66 466 66 471 66 476 67 481 67 486 67 491 67 496 67 502 68 507 68 512 68 517 …",
"sideL": "M150 470 272 470 333 482 333 494 334 506 334 518 334 530 333 542 332 554 332 566 332 578 333 590 334 602 335 614 336 626 338 638 340 650 339 662 338 674 337 686 336 698 336 710 336 722 336 734 336 746…",
"sideR": "M874 470 752 470 690 482 689 494 689 506 688 518 688 530 689 542 690 554 690 566 690 578 689 590 689 602 688 614 687 626 685 638 683 650 682 662 683 674 684 686 685 698 686 710 686 722 686 734 686 746…"
},
"print": {
"back": {
"x": 512,
"y": 168,
"w": 300,
"h": 112
},
"name": {
"x": 512,
"y": 290,
"w": 380,
"h": 64
},
"number": {
"x": 512,
"y": 505,
"w": 320,
"h": 240
}
}
}
}In your pack the record’s id starts with your pack’s id instead of core, unless you mean to replace this one.