@johnmorrisdotca/kyogijo-stadiums 0.18.1 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/NOTICE.md +1 -0
  3. package/README.md +62 -28
  4. package/dist/budo/cage.d.ts +46 -0
  5. package/dist/budo/cage.js +91 -0
  6. package/dist/budo/describe.js +11 -0
  7. package/dist/budo/looks.js +8 -0
  8. package/dist/budo/plan.d.ts +10 -2
  9. package/dist/budo/plan.js +15 -1
  10. package/dist/budo/types.d.ts +11 -3
  11. package/dist/budo-entry.d.ts +1 -1
  12. package/dist/budo-entry.js +1 -1
  13. package/dist/budo.style.js +7 -2
  14. package/dist/common.d.ts +5 -0
  15. package/dist/common.js +6 -1
  16. package/dist/crowd.js +2 -0
  17. package/dist/draw.js +8 -7
  18. package/dist/features.js +10 -0
  19. package/dist/fields.types.d.ts +1 -1
  20. package/dist/heat.zones.js +1 -1
  21. package/dist/homeside.js +2 -0
  22. package/dist/judging-entry.d.ts +6 -1
  23. package/dist/judging-entry.js +5 -1
  24. package/dist/judging.board.d.ts +26 -0
  25. package/dist/judging.board.js +125 -0
  26. package/dist/judging.broadcast.d.ts +6 -0
  27. package/dist/judging.broadcast.js +72 -0
  28. package/dist/judging.d.ts +5 -0
  29. package/dist/judging.draw.d.ts +19 -6
  30. package/dist/judging.draw.js +14 -104
  31. package/dist/judging.js +14 -2
  32. package/dist/judging.mount.d.ts +16 -0
  33. package/dist/judging.mount.js +69 -0
  34. package/dist/judging.plan.d.ts +52 -0
  35. package/dist/judging.plan.js +91 -0
  36. package/dist/judging.print.d.ts +58 -0
  37. package/dist/judging.print.js +86 -0
  38. package/dist/judging.style.d.ts +5 -0
  39. package/dist/judging.style.js +22 -0
  40. package/dist/judging.text.d.ts +7 -0
  41. package/dist/judging.text.js +23 -0
  42. package/dist/judging.types.d.ts +9 -0
  43. package/dist/judging.words.d.ts +1 -0
  44. package/dist/judging.words.js +2 -0
  45. package/dist/leagues/budo.d.ts +3 -2
  46. package/dist/leagues/budo.js +2 -1
  47. package/dist/leagues/combat.d.ts +54 -0
  48. package/dist/leagues/combat.js +27 -0
  49. package/dist/leagues/sources.js +6 -0
  50. package/dist/leagues/types.d.ts +1 -1
  51. package/dist/leagues.d.ts +1 -0
  52. package/dist/leagues.js +21 -1
  53. package/dist/outline.js +1 -0
  54. package/dist/ranges.names.js +1 -0
  55. package/dist/score.js +3 -0
  56. package/dist/strings.d.ts +7 -1
  57. package/dist/strings.js +22 -10
  58. package/dist/surfaces/budo.js +3 -2
  59. package/dist/turn.kit.d.ts +1 -1
  60. package/dist/turn.style.js +8 -3
  61. package/dist/types.d.ts +4 -2
  62. package/dist/units.js +2 -0
  63. package/dist/uprights.budo.js +4 -2
  64. package/dist/uprights.cage.d.ts +4 -0
  65. package/dist/uprights.cage.js +91 -0
  66. package/dist/uprights.js +3 -3
  67. package/dist/version.d.ts +1 -1
  68. package/dist/version.js +1 -1
  69. package/package.json +5 -3
@@ -0,0 +1,23 @@
1
+ // What a judging picture says in words: the title and the description of an assignment, each mat with each seat and who is in it. Shared by the plan view, the broadcast view and the 3D view.
2
+ import { JUDGING_WORDS } from "./judging.words.js";
3
+ import { fill } from "./strings.js";
4
+ /** The sentence that names one seat and who sits in it. */
5
+ function seatSentence(a, setting) {
6
+ const w = JUDGING_WORDS[setting.language].say;
7
+ const seat = a.seat.label[setting.language];
8
+ if (!a.assigned)
9
+ return fill(w.seatVacant, { seat });
10
+ if (a.id === "")
11
+ return fill(w.seatNoId, { seat, name: a.name });
12
+ return fill(w.seat, { seat, name: a.name === "" ? "—" : a.name, id: a.id });
13
+ }
14
+ /** The title and the description of an assignment: each mat with each seat and who is in it. */
15
+ export function judgingText(setting, options, chart, view = setting.view) {
16
+ const words = JUDGING_WORDS[setting.language];
17
+ const style = fill(words.styleName[setting.style], { count: setting.mats[0].seats.length });
18
+ const mats = setting.total === 1 ? words.say.matsOne : fill(words.say.matsMany, { n: setting.total });
19
+ const title = options.title ?? fill(words.say.title, { style, mats });
20
+ const sentences = setting.mats.map((m) => fill(words.say.mat, { label: m.label, seats: m.seats.map((a) => seatSentence(a, setting)).join(words.say.join) }));
21
+ const description = options.description ?? [...sentences, view === "broadcast" ? words.say.board : chart && setting.seatNames ? words.say.names : words.say.chartOnly].join(setting.language === "ja" ? "" : " ");
22
+ return { title, description };
23
+ }
@@ -15,6 +15,8 @@ export interface JudgingMat {
15
15
  label?: string;
16
16
  /** Who sits where. A seat that is not named is shown as not assigned. */
17
17
  officials?: readonly JudgingOfficial[];
18
+ /** A line for the broadcast board's foot, before the style: `Round 2`, `Pool B`, `Final block`. At most 60 characters. */
19
+ line?: string;
18
20
  }
19
21
  /** A judging assignment as the drawing asks for it. */
20
22
  export interface JudgingOptions {
@@ -33,6 +35,11 @@ export interface JudgingOptions {
33
35
  * evenly (never stretched or condensed), in the biggest size that fits its card and no smaller than a readable one; a seat whose name does not fit shows its number alone.
34
36
  */
35
37
  seatNames?: boolean;
38
+ /**
39
+ * What is drawn: the `plan` with its chart (the default, the layout to print) or the `broadcast` picture: the mat large, as a television would show it, with the officials on a board at its side like a graphic, the seats' number
40
+ * badges where the officials sit, and no chart. The picture is 16:9 and scales as a whole, type and all, so it is as sharp on a tablet as on a television.
41
+ */
42
+ view?: "plan" | "broadcast";
36
43
  /** Where the chart is laid: beside the plan (`landscape`, the default) or under it (`portrait`). */
37
44
  orientation?: "landscape" | "portrait";
38
45
  /** What the plan shows: the whole `mat` (the default) or the judges' `bench`, close up, so that the names in the seats are as large as they can be. */
@@ -79,5 +86,7 @@ export interface JudgingResolved {
79
86
  /** From 1. */
80
87
  n: number;
81
88
  label: string;
89
+ /** The line for the broadcast board's foot; empty when there is none. */
90
+ line: string;
82
91
  seats: JudgingAssignment[];
83
92
  }
@@ -27,6 +27,7 @@ export interface JudgingWords {
27
27
  seatVacant: string;
28
28
  names: string;
29
29
  chartOnly: string;
30
+ board: string;
30
31
  join: string;
31
32
  };
32
33
  /** The table that says the same as the picture. */
@@ -13,6 +13,7 @@ export const JUDGING_WORDS = {
13
13
  seatVacant: "{seat} not assigned",
14
14
  names: "The names are in the seats where they fit, and in the chart of mat, seat, name and ID.",
15
15
  chartOnly: "The names are in the chart of mat, seat, name and ID.",
16
+ board: "The officials are listed on a board at the side of the mat, each with the number of the seat, name and ID; the numbers are on the seats.",
16
17
  join: "; ",
17
18
  },
18
19
  table: { caption: "{title}", mat: "Mat", seat: "Seat", name: "Name", id: "ID" },
@@ -32,6 +33,7 @@ export const JUDGING_WORDS = {
32
33
  seatVacant: "{seat}は未定",
33
34
  names: "氏名は、席に収まる場合は各席の中に表示し、試合場・席・氏名・IDの一覧表にも載せています。",
34
35
  chartOnly: "氏名は、試合場・席・氏名・IDの一覧表に載せています。",
36
+ board: "審判員は、席の番号・氏名・IDとともに試合場の横の表示板に載せ、席の番号は各席に表示しています。",
35
37
  join: "、",
36
38
  },
37
39
  table: { caption: "{title}", mat: "試合場", seat: "席", name: "氏名", id: "ID" },
@@ -1,4 +1,5 @@
1
1
  import { type Span } from "./fields.ts";
2
+ import { type CombatFigures, type CombatLeague } from "./combat.ts";
2
3
  import type { LeagueBase } from "./types.ts";
3
4
  /** A mat: its length and width in metres. */
4
5
  export interface Mat {
@@ -167,7 +168,7 @@ export interface DojoFigures {
167
168
  };
168
169
  }
169
170
  /** The figures of a budō league. */
170
- export type BudoFigures = JudoFigures | KarateFigures | KendoFigures | SumoFigures | KyudoFigures | DojoFigures;
171
+ export type BudoFigures = JudoFigures | KarateFigures | KendoFigures | SumoFigures | KyudoFigures | DojoFigures | CombatFigures;
171
172
  /** The leagues of each budō sport. */
172
173
  export type JudoLeague = LeagueBase<"judo", JudoFigures>;
173
174
  export type KarateLeague = LeagueBase<"karate", KarateFigures>;
@@ -176,7 +177,7 @@ export type SumoLeague = LeagueBase<"sumo", SumoFigures>;
176
177
  export type KyudoLeague = LeagueBase<"kyudo", KyudoFigures>;
177
178
  export type DojoLeague = LeagueBase<"dojo", DojoFigures>;
178
179
  /** A league with a budō surface of its own. */
179
- export type BudoLeague = JudoLeague | KarateLeague | KendoLeague | SumoLeague | KyudoLeague | DojoLeague;
180
+ export type BudoLeague = JudoLeague | KarateLeague | KendoLeague | SumoLeague | KyudoLeague | DojoLeague | CombatLeague;
180
181
  /** The IJF's contest area (Sport and Organisation Rules 8.7, version of 21 January 2026) as drawn for the Games, the Worlds and the Masters. */
181
182
  export declare const IJF_CONTEST: JudoFigures;
182
183
  /** The All Japan Judo Federation's: the tatami of 182 cm by 91 cm, the red tatami of the danger zone, and the red and white tape 4 m (2 ken) apart (Tournament Management Guidebook 2023, 2-1, 2-3, 2-4). */
@@ -1,6 +1,7 @@
1
1
  // The surfaces of the budō (武道): the contest areas of judo and karate, the shiai-jo of kendo, the dohyō of sumo, the kyūdōjō, and the tatami of a dojo, each from the rulebook or the
2
2
  // federation's own page it was read in, with every figure in metres. A figure that no rule gives is said so in its comment (ours). Nothing here draws.
3
3
  import { span } from "./fields.js";
4
+ import { COMBAT_LEAGUES } from "./combat.js";
4
5
  /** The IJF's contest area (Sport and Organisation Rules 8.7, version of 21 January 2026) as drawn for the Games, the Worlds and the Masters. */
5
6
  export const IJF_CONTEST = {
6
7
  kind: "judo",
@@ -110,4 +111,4 @@ export const DOJO_LEAGUES = [
110
111
  { id: "judo-2x1", family: "dojo", name: { en: "Judo tatami, 2 m by 1 m", ja: "柔道畳(2m×1m)" }, unit: "m", dimensions: mat(2, 1, "the IJF's standard", "国際柔道連盟の標準"), sources: ["ijf-sor", "ajjf-guide"] },
111
112
  ];
112
113
  /** Every budō league, once each. */
113
- export const BUDO_LEAGUES = Object.freeze([...JUDO_LEAGUES, ...KARATE_LEAGUES, ...KENDO_LEAGUES, ...SUMO_LEAGUES, ...KYUDO_LEAGUES, ...DOJO_LEAGUES]);
114
+ export const BUDO_LEAGUES = Object.freeze([...JUDO_LEAGUES, ...KARATE_LEAGUES, ...KENDO_LEAGUES, ...SUMO_LEAGUES, ...KYUDO_LEAGUES, ...DOJO_LEAGUES, ...COMBAT_LEAGUES]);
@@ -0,0 +1,54 @@
1
+ import { type Span } from "./fields.ts";
2
+ import type { LeagueBase } from "./types.ts";
3
+ /** The figures of an MMA cage (a fenced area), in metres. */
4
+ export interface MmaFigures {
5
+ kind: "mma";
6
+ /**
7
+ * The width of the fenced area: no smaller than 20 feet and no larger than 32 feet (NRUC 5.010 3(a); IMMAF 1: 20 by 20 to 32 by 32 feet). A cage with eight sides is measured across the flats, as a cage is called "30 feet across". Two sizes
8
+ * are common (typical, not a rule): 30 feet, the larger, which is drawn, and 25 feet, the smaller one that promotions use in smaller venues.
9
+ */
10
+ width: Span;
11
+ /** The sides: the fenced area is round or has at least six equal sides (NRUC 5.010 3(a)); eight is the common cage and is drawn (typical). */
12
+ sides: number;
13
+ /** The platform: not more than 4 feet above the floor of the building, with suitable steps (NRUC 5.010 3(c)). 4 feet is the usual height of a cage on a stage and is drawn (typical). */
14
+ platform: {
15
+ height: Span;
16
+ steps: {
17
+ treads: number;
18
+ tread: number;
19
+ width: number;
20
+ };
21
+ };
22
+ /** The width of the platform beyond the fence, the apron: the rules give none, so 1.2 m, four feet of walkway (ours). */
23
+ apron: number;
24
+ /** The floor: at least a 1 inch layer of closed-cell foam under a canvas, duck or vinyl cover (NRUC 5.010 3(b)). */
25
+ foam: number;
26
+ /** The fence: posts of metal, not more than 6 inches across, run from the floor of the building to between 5 and 7 feet above the floor of the fenced area (NRUC 5.010 3(d)); the fence itself is 6 feet in the usual cage and is drawn (typical). */
27
+ fence: Span;
28
+ /** The width of a post, 6 inches at most (NRUC 5.010 3(d)), and the padding on it and on the rails: the rules say "properly padded" and give no size (ours: a pad 0.3 m across at the post, a rail pad 0.12 m deep). */
29
+ post: {
30
+ diameter: number;
31
+ pad: number;
32
+ rail: number;
33
+ };
34
+ /** The entrances: two, with secure locking mechanisms (NRUC 5.010 3(g)); the IMMAF asks for them on opposite sides and opening outward. Their width, 0.9 m, and height, 1.5 m, are typical and not a rule. */
35
+ gates: {
36
+ count: number;
37
+ width: number;
38
+ height: number;
39
+ };
40
+ }
41
+ /** A cage league: a regulation's cage. */
42
+ export type MmaLeague = LeagueBase<"mma", MmaFigures>;
43
+ /** The fenced area of the Nevada Rules of Unarmed Combat (NRUC 5.010 3), which most commissions copy. */
44
+ export declare const NRUC_CAGE: MmaFigures;
45
+ /** The amateur fenced area of the IMMAF's Unified Rules for amateur competition: the same sizes, with 40 mm of foam and a vinyl cover. */
46
+ export declare const IMMAF_CAGE: MmaFigures;
47
+ /** The leagues of each combat sport: for each the rulebook's own first. */
48
+ export declare const MMA_LEAGUES: readonly MmaLeague[];
49
+ /** The figures of a combat league. */
50
+ export type CombatFigures = MmaFigures;
51
+ /** A league with a combat surface of its own. */
52
+ export type CombatLeague = MmaLeague;
53
+ /** Every combat league, once each. */
54
+ export declare const COMBAT_LEAGUES: readonly CombatLeague[];
@@ -0,0 +1,27 @@
1
+ // The surfaces of the combat sports: the MMA cage and, as they are added, the boxing ring, the wrestling mats and the professional wrestling ring, each from the rulebook or the regulation it was read in, with every
2
+ // figure in metres. A figure that no rule gives is said so in its comment (ours), and a figure that is common practice and not a rule is said so (typical). Nothing here draws.
3
+ import { span } from "./fields.js";
4
+ /** One foot, and one inch, in metres: the rules are written in feet and inches. */
5
+ const FT = 0.3048;
6
+ const IN = 0.0254;
7
+ /** The fenced area of the Nevada Rules of Unarmed Combat (NRUC 5.010 3), which most commissions copy. */
8
+ export const NRUC_CAGE = {
9
+ kind: "mma",
10
+ width: span(20 * FT, 32 * FT, 30 * FT),
11
+ sides: 8,
12
+ platform: { height: span(0, 4 * FT, 4 * FT), steps: { treads: 3, tread: 0.3, width: 1.2 } },
13
+ apron: 1.2,
14
+ foam: 1 * IN,
15
+ fence: span(5 * FT, 7 * FT, 6 * FT),
16
+ post: { diameter: 6 * IN, pad: 0.3, rail: 0.12 },
17
+ gates: { count: 2, width: 0.9, height: 1.5 },
18
+ };
19
+ /** The amateur fenced area of the IMMAF's Unified Rules for amateur competition: the same sizes, with 40 mm of foam and a vinyl cover. */
20
+ export const IMMAF_CAGE = { ...NRUC_CAGE, foam: 0.04 };
21
+ /** The leagues of each combat sport: for each the rulebook's own first. */
22
+ export const MMA_LEAGUES = [
23
+ { id: "nruc", family: "mma", name: { en: "MMA cage, Nevada Rules of Unarmed Combat", ja: "総合格闘技のケージ(ネバダ州の規則)" }, unit: "ft", figuresUnit: "m", dimensions: NRUC_CAGE, sources: ["nruc", "oar-230-070-0025", "wp-mma-cage"], builtIn: true },
24
+ { id: "immaf", family: "mma", name: { en: "MMA cage, IMMAF amateur rules", ja: "総合格闘技のケージ(IMMAFのアマチュア規則)" }, unit: "ft", figuresUnit: "m", dimensions: IMMAF_CAGE, sources: ["immaf-amateur", "nruc"] },
25
+ ];
26
+ /** Every combat league, once each. */
27
+ export const COMBAT_LEAGUES = Object.freeze([...MMA_LEAGUES]);
@@ -3,6 +3,7 @@
3
3
  const source = (s) => [s.id, Object.freeze(s)];
4
4
  const READ = "2026-10-13";
5
5
  const BUDO_READ = "2026-10-14";
6
+ const COMBAT_READ = "2026-10-20";
6
7
  /** Every document a league's figures were read from, by id. */
7
8
  export const LEAGUE_SOURCES = Object.freeze(Object.fromEntries([
8
9
  // The leagues the package started with.
@@ -124,6 +125,11 @@ export const LEAGUE_SOURCES = Object.freeze(Object.fromEntries([
124
125
  source({ id: "budokan-overview", title: "日本武道館建物等概要 (Nippon Budokan: buildings and seats), the arena plan: a regular octagon of 55 m across, 60 m corner to corner, 23 m a side, 2,513 m²", by: "公益財団法人日本武道館 (Nippon Budokan)", edition: "the leaflet of October 2021", url: "https://www.nipponbudokan.or.jp/pdf/202110.pdf", read: BUDO_READ, note: "opened 3 October 1964; at most 14,501; the arena as an octagon" }),
125
126
  source({ id: "butokuden-ja", title: "旧武徳殿 (Japanese Wikipedia): built in 1899 by the Dai Nippon Butokukai, designed by Matsumuro Shigemitsu, an Important Cultural Property since 1996, 1,200 seats", by: "Wikipedia contributors (CC BY-SA 4.0)", edition: "the article as read on the date given", url: "https://ja.wikipedia.org/wiki/%E6%97%A7%E6%AD%A6%E5%BE%B3%E6%AE%BF", read: BUDO_READ, note: "the dates, the address and the seats; no mat count was found" }),
126
127
  source({ id: "wikipedia-halls", title: "Wikipedia and Wikidata on the halls: Nippon Budokan, Ryōgoku Kokugikan, Kodokan, Butokuden and the Budokwai (their capacities, opening dates, coordinates and the events held in them)", by: "Wikipedia contributors (CC BY-SA 4.0) and Wikidata (CC0)", edition: "the articles and items as read on the date given", url: "https://www.wikidata.org/wiki/Q386246", read: BUDO_READ, note: "capacity 11,098 (Wikidata P1083 and English Wikipedia) for the Kokugikan; 14,471 for the Budokan; the items Q1165384, Q386246, Q176821, Q1017987 and Q3646473; no text is copied" }),
128
+ // The combat sports.
129
+ source({ id: "nruc", title: "Nevada Rules of Unarmed Combat, NRUC 5.010 (requirements for a ring or fenced area for mixed martial arts: a fenced area of 20 to 32 feet, a platform of at most 4 feet with steps, metal posts of at most 6 inches reaching 5 to 7 feet over the fenced floor, padding, a fence that cannot be broken through, two entrances) and NRUC 2.050 (a boxing ring)", by: "Nevada Athletic Commission", edition: "adopted 20 September 2022, amended 29 October 2024 (the file of 20 November 2024)", url: "https://boxing.nv.gov/uploadedFiles/boxingnvgov/content/faq/sections/2024-11-20-NRUC-OFFICIAL-FINAL.pdf", read: COMBAT_READ, note: "the cage's width, the platform's greatest height, the fence posts' height, the floor's foam, the two gates; the boxing ring's figures are read here too" }),
130
+ source({ id: "oar-230-070-0025", title: "Oregon Administrative Rule 230-070-0025, Mixed Martial Arts Fenced Area or Ring", by: "Oregon Department of Consumer and Business Services", edition: "the rule as read on the date given", url: "https://oregon.public.law/rules/oar_230-070-0025", read: COMBAT_READ, note: "the fenced area is round or has at least six equal sides, 18 to 32 feet wide, a platform of at most 4 feet, at least six posts of 6 to 7 feet, at least two entrances; a second commission's rule beside Nevada's, which is the one drawn" }),
131
+ source({ id: "immaf-amateur", title: "IMMAF Mixed Martial Arts Unified Rules for amateur, junior and senior competition: the fighting area and the fence", by: "International Mixed Martial Arts Federation", edition: "January 2021", url: "https://immaf.org/wp-content/uploads/2025/11/MMA-UNIFIED-RULES-FOR-AMATEUR-JUNIOR-SENIOR-January-2021.pdf", read: COMBAT_READ, note: "a fighting area circular or with equal sides, 20 by 20 to 32 by 32 feet, at least 40 mm of high-density foam under a vinyl cover, two gated entrances that open outward, on opposite sides if possible" }),
132
+ source({ id: "wp-mma-cage", title: "Mixed martial arts cage (English Wikipedia), and Mixed martial arts, Fighting area: the cage called a cage or an eight-sided cage; the larger cage of 30 feet across with a 6 foot fence on a 4 foot platform, the smaller of 25 feet, foam padding along the top of the fence and between its eight sections, two gates opposite each other", by: "Wikipedia contributors (CC BY-SA 4.0), read for facts only", edition: "revision 1377260922 (Mixed martial arts cage) and revision 1381048799 (Mixed martial arts)", url: "https://en.wikipedia.org/w/index.php?title=Mixed_martial_arts_cage&oldid=1377260922", read: COMBAT_READ, note: "what is typical and not a rule: 30 feet and 25 feet across, a 6 foot fence, a 4 foot platform, eight sides, two gates opposite each other; the article says the name of one promotion's cage is a trademark, so the package names the cage for what it is" }),
127
133
  // Baseball and softball.
128
134
  source({ id: "obr-2026", title: "Official Baseball Rules, 2.01, 2.03 and 2.04 (the rules Minor League Baseball plays under)", by: "Major League Baseball", edition: "2026", url: "https://mktg.mlbstatic.com/mlb/official-information/2026-official-baseball-rules.pdf", read: READ, note: "bases 18 inches (2.03), the fence at least 325 and 400 feet (2.01 note); Minor League Baseball's own facility standards are not public" }),
129
135
  source({ id: "ncaa-baseball", title: "NCAA Baseball Rules, Rule 1, and the field diagram", by: "NCAA", edition: "2027 and 2028 rules book (printed October 2026)", url: "https://ncaaorg.s3.amazonaws.com/championships/sports/baseball/rules/PRMBA_RulesBook.pdf", read: READ, note: "90-foot square (1-2-a), recommended fence 330, 375 and 400 feet (1-2-b), boxes 4 by 6 feet (1-3-a), backstop 45 feet (1-5-b); diagram: PRMBA_Re-imagedFieldDiagrams.pdf" }),
@@ -5,7 +5,7 @@ export interface Named {
5
5
  ja: string;
6
6
  }
7
7
  /** The families of surface a league is a variant of. */
8
- export type Family = "basketball" | "hockey" | "football" | "baseball" | "curling" | "tennis" | "volleyball" | "badminton" | "pickleball" | "tabletennis" | "padel" | "squash" | "racquetball" | "sepaktakraw" | "teqball" | "roundnet" | "netball" | "lacrosse" | "rugby" | "afl" | "gaelic" | "cricket" | "fieldhockey" | "handball" | "athletics" | "skating" | "judo" | "karate" | "kendo" | "sumo" | "kyudo" | "dojo";
8
+ export type Family = "basketball" | "hockey" | "football" | "baseball" | "curling" | "tennis" | "volleyball" | "badminton" | "pickleball" | "tabletennis" | "padel" | "squash" | "racquetball" | "sepaktakraw" | "teqball" | "roundnet" | "netball" | "lacrosse" | "rugby" | "afl" | "gaelic" | "cricket" | "fieldhockey" | "handball" | "athletics" | "skating" | "judo" | "karate" | "kendo" | "sumo" | "kyudo" | "dojo" | "mma";
9
9
  /** The state of one marking from a season on, in a league's own history: the season it began, what it was, and its sources. */
10
10
  export interface LeagueSpan<T> {
11
11
  /** The first season it was in force, or `null` for the state before the first change that is cited. */
package/dist/leagues.d.ts CHANGED
@@ -36,6 +36,7 @@ export { WA_STANDARD_TRACK, WA_SHORT_TRACK, WA_STAGGER_TABLE, WA_SHORT_STAGGER_T
36
36
  export type { SkatingFigures, SkatingLeague, LongTrackFigures, ShortTrackFigures, FigureRinkFigures } from "./leagues/skating.ts";
37
37
  export { ISU_LONG_TRACK, ISU_SHORT_TRACK, ISU_FIGURE_RINK, ISU_LONG_TRACK_TABLE } from "./leagues/skating.ts";
38
38
  export type { BudoFigures, BudoLeague, DojoFigures, DojoLeague, JudoFigures, JudoLeague, KarateFigures, KarateLeague, KendoFigures, KendoLeague, KyudoFigures, KyudoLeague, Mat, SumoFigures, SumoLeague } from "./leagues/budo.ts";
39
+ export { IMMAF_CAGE, MMA_LEAGUES, NRUC_CAGE } from "./leagues/combat.ts";
39
40
  export { AJJF_CONTEST, BUDO_LEAGUES, ENTEKI, FIK_SHIAI_JO, IJF_CONTEST, IJF_KATA, JSA_DOHYO, KINTEKI, WKF_KATA, WKF_KUMITE } from "./leagues/budo.ts";
40
41
  export type { BadmintonFigures, BadmintonLeague, FreeZone, FreeZones, NetFigures, NetLeague, NetSport, NetballFigures, NetballLeague, PadelFigures, PadelLeague, PickleballFigures, PickleballLeague, RacquetballFigures, RacquetballLeague, RoundnetFigures, RoundnetLeague, SepakTakrawFigures, SepakTakrawLeague, SquashFigures, SquashLeague, TableTennisFigures, TableTennisLeague, TennisFigures, TennisLeague, TeqballFigures, TeqballLeague, VolleyballFigures, VolleyballLeague } from "./leagues/courts.ts";
41
42
  export type { CourtFigures, CourtMarks } from "./leagues/basketball.ts";
package/dist/leagues.js CHANGED
@@ -15,6 +15,7 @@ import { FIELD_HOCKEY_LEAGUES, fieldHockeyInFeet } from "./leagues/fieldhockey.j
15
15
  import { ATHLETICS_LEAGUES, athleticsInFeet } from "./leagues/athletics.js";
16
16
  import { longOval, outerEdge } from "./skating/track.js";
17
17
  import { SKATING_LEAGUES, skatingInFeet } from "./leagues/skating.js";
18
+ import { MMA_LEAGUES } from "./leagues/combat.js";
18
19
  import { BUDO_LEAGUES, DOJO_LEAGUES, JUDO_LEAGUES, KARATE_LEAGUES, KENDO_LEAGUES, KYUDO_LEAGUES, SUMO_LEAGUES } from "./leagues/budo.js";
19
20
  import { GAELIC_LEAGUES, gaelicInFeet } from "./leagues/gaelic.js";
20
21
  import { HANDBALL_LEAGUES, handballInFeet } from "./leagues/handball.js";
@@ -27,9 +28,10 @@ export { LEAGUE_SOURCES };
27
28
  export { AFL_GROUNDS } from "./leagues/aussie.js";
28
29
  export { WA_STANDARD_TRACK, WA_SHORT_TRACK, WA_STAGGER_TABLE, WA_SHORT_STAGGER_TABLE } from "./leagues/athletics.js";
29
30
  export { ISU_LONG_TRACK, ISU_SHORT_TRACK, ISU_FIGURE_RINK, ISU_LONG_TRACK_TABLE } from "./leagues/skating.js";
31
+ export { IMMAF_CAGE, MMA_LEAGUES, NRUC_CAGE } from "./leagues/combat.js";
30
32
  export { AJJF_CONTEST, BUDO_LEAGUES, ENTEKI, FIK_SHIAI_JO, IJF_CONTEST, IJF_KATA, JSA_DOHYO, KINTEKI, WKF_KATA, WKF_KUMITE } from "./leagues/budo.js";
31
33
  /** The family of surface each sport draws; soccer's variants are its pitches (`pitch`), not leagues. */
32
- export const FAMILY_OF = Object.freeze({ nfl: "football", cfl: "football", ifaf: "football", nhl: "hockey", nba: "basketball", mlb: "baseball", soccer: undefined, curling: "curling", tennis: "tennis", volleyball: "volleyball", badminton: "badminton", pickleball: "pickleball", tabletennis: "tabletennis", padel: "padel", squash: "squash", racquetball: "racquetball", sepaktakraw: "sepaktakraw", teqball: "teqball", roundnet: "roundnet", netball: "netball", lacrosse: "lacrosse", rugby: "rugby", afl: "afl", gaelic: "gaelic", cricket: "cricket", fieldhockey: "fieldhockey", handball: "handball", swimming: undefined, waterpolo: undefined, diving: undefined, artisticswimming: undefined, athletics: "athletics", skating: "skating", judo: "judo", karate: "karate", kendo: "kendo", sumo: "sumo", kyudo: "kyudo", dojo: "dojo" });
34
+ export const FAMILY_OF = Object.freeze({ nfl: "football", cfl: "football", ifaf: "football", nhl: "hockey", nba: "basketball", mlb: "baseball", soccer: undefined, curling: "curling", tennis: "tennis", volleyball: "volleyball", badminton: "badminton", pickleball: "pickleball", tabletennis: "tabletennis", padel: "padel", squash: "squash", racquetball: "racquetball", sepaktakraw: "sepaktakraw", teqball: "teqball", roundnet: "roundnet", netball: "netball", lacrosse: "lacrosse", rugby: "rugby", afl: "afl", gaelic: "gaelic", cricket: "cricket", fieldhockey: "fieldhockey", handball: "handball", swimming: undefined, waterpolo: undefined, diving: undefined, artisticswimming: undefined, athletics: "athletics", skating: "skating", judo: "judo", karate: "karate", kendo: "kendo", sumo: "sumo", kyudo: "kyudo", dojo: "dojo", mma: "mma" });
33
35
  /**
34
36
  * The leagues each sport can draw, in the order a menu lists them, the sport's own first (the three football sports share their
35
37
  * list, the football leagues). Soccer and the pools have none.
@@ -75,6 +77,7 @@ export const LEAGUES = Object.freeze({
75
77
  sumo: SUMO_LEAGUES,
76
78
  kyudo: KYUDO_LEAGUES,
77
79
  dojo: DOJO_LEAGUES,
80
+ mma: MMA_LEAGUES,
78
81
  });
79
82
  /** Every league of every family, once each. */
80
83
  export const VARIANTS = Object.freeze([...BASKETBALL_LEAGUES, ...HOCKEY_LEAGUES, ...FOOTBALL_LEAGUES, ...BASEBALL_LEAGUES, ...CURLING_LEAGUES, ...TENNIS_LEAGUES, ...VOLLEYBALL_LEAGUES, ...BADMINTON_LEAGUES, ...PICKLEBALL_LEAGUES, ...TABLE_TENNIS_LEAGUES, ...PADEL_LEAGUES, ...SQUASH_LEAGUES, ...RACQUETBALL_LEAGUES, ...SEPAK_TAKRAW_LEAGUES, ...TEQBALL_LEAGUES, ...ROUNDNET_LEAGUES, ...NETBALL_LEAGUES, ...LACROSSE_LEAGUES, ...RUGBY_LEAGUES, ...AFL_LEAGUES, ...GAELIC_LEAGUES, ...CRICKET_LEAGUES, ...FIELD_HOCKEY_LEAGUES, ...HANDBALL_LEAGUES, ...ATHLETICS_LEAGUES, ...BUDO_LEAGUES]);
@@ -330,6 +333,13 @@ export function leagueSize(sport, id, unit) {
330
333
  feet = { length: convertLength(length, "m", "ft"), width: convertLength(frontage, "m", "ft") };
331
334
  break;
332
335
  }
336
+ case "mma": {
337
+ // The platform: the cage at the size drawn, with its apron.
338
+ const d = league.dimensions;
339
+ const m = d.width.drawn + 2 * d.apron;
340
+ feet = { length: convertLength(m, "m", "ft"), width: convertLength(m, "m", "ft") };
341
+ break;
342
+ }
333
343
  case "dojo": {
334
344
  // The usual 20 jō: 5 mats' widths across and 8 along.
335
345
  const d = league.dimensions;
@@ -684,6 +694,16 @@ export function leagueFigures(league) {
684
694
  ["shajō", `${f.hall.depth} m deep, ${f.hall.side} m from the end shooters to the walls, ceiling ${f.ceiling} m`],
685
695
  ];
686
696
  }
697
+ case "mma": {
698
+ const f = league.dimensions;
699
+ const ft = (m) => `${Math.round((m / 0.3048) * 100) / 100} ft`;
700
+ return [
701
+ ["width", `${ft(f.width.min)} to ${ft(f.width.max)} across, ${f.sides} sides drawn`],
702
+ ["platform", `at most ${ft(f.platform.height.max)} high, with steps`],
703
+ ["fence", `posts ${ft(f.fence.min)} to ${ft(f.fence.max)} over the canvas`],
704
+ ["gates", `${f.gates.count}, with secure locks`],
705
+ ];
706
+ }
687
707
  case "dojo": {
688
708
  const f = league.dimensions;
689
709
  return [
package/dist/outline.js CHANGED
@@ -135,6 +135,7 @@ export function outlineOf(o) {
135
135
  case "kendo":
136
136
  case "sumo":
137
137
  case "kyudo":
138
+ case "mma":
138
139
  case "dojo": {
139
140
  const plan = budoPlan({ ...o, sport, detail: o.detail });
140
141
  const k = 1 / 0.3048;
@@ -78,6 +78,7 @@ export const RANGES = Object.freeze({
78
78
  sumo: Object.freeze([range("ring"), range("start"), range("half", "left")]),
79
79
  kyudo: Object.freeze([range("shajo"), range("yamichi"), range("azuchi")]),
80
80
  dojo: Object.freeze([range("kamiza"), range("half", "left")]),
81
+ mma: Object.freeze([range("cage"), range("gate"), range("half", "left")]),
81
82
  });
82
83
  const isNumber = (value) => typeof value === "number" && Number.isFinite(value);
83
84
  /**
package/dist/score.js CHANGED
@@ -218,6 +218,9 @@ export function glyph(sport) {
218
218
  case "dojo":
219
219
  // A dojo: a floor of mats laid so that no four corners meet.
220
220
  return "M-14 -10H14V10H-14ZM-14 0H14M-5 -10V0M5 0V10";
221
+ case "mma":
222
+ // An eight-sided cage on its platform: the platform's square, the octagon of the fence and the two gates.
223
+ return "M-10 -10H10V10H-10ZM-3 -7L3 -7L7 -3L7 3L3 7L-3 7L-7 3L-7 -3ZM-2 -7V-10M2 -7V-10M-2 7V10M2 7V10";
221
224
  case "athletics":
222
225
  // A track: the oval's outer edge, a lane line and the kerb, and the finish line across the straight.
223
226
  return "M-9 -10H9A10 10 0 0 1 9 10H-9A10 10 0 0 1 -9 -10ZM-9 -8.2H9A8.2 8.2 0 0 1 9 8.2H-9A8.2 8.2 0 0 1 -9 -8.2ZM-9 -6.4H9A6.4 6.4 0 0 1 9 6.4H-9A6.4 6.4 0 0 1 -9 -6.4ZM9 6.4V10";
package/dist/strings.d.ts CHANGED
@@ -440,6 +440,12 @@ export interface KyogijoWords {
440
440
  dojoBanner: string;
441
441
  dojoAreas: string;
442
442
  dojoWalls: string;
443
+ /** An MMA cage: the sentence ({width}, {feet}, {fence}, {platform}), the platform it stands on ({height}) or the floor it stands at, and the sentences about its gates and its steps. */
444
+ mma: string;
445
+ mmaPlatform: string;
446
+ mmaFloor: string;
447
+ mmaGates: string;
448
+ mmaSteps: string;
443
449
  /** The scoreboards: the heads and the sentences that say what each side scored. */
444
450
  board: {
445
451
  ippon: string;
@@ -993,7 +999,7 @@ export interface KyogijoWords {
993
999
  item: string;
994
1000
  itemSag: string;
995
1001
  /** The names of what stands on the surface, by kind. */
996
- parts: Record<"scoreboard" | "net" | "antennae" | "goalposts" | "netposts" | "hoop" | "goal" | "boards" | "stumps" | "pylons" | "flags" | "fence" | "backstop" | "foul-poles" | "table-legs" | "walls" | "starting-blocks" | "backstroke-flags" | "false-start-rope" | "springboards" | "platforms" | "judges-stand" | "hurdles" | "steeplechase" | "high-jump" | "pole-vault" | "cage" | "padding" | "rink-boards" | "mound" | "azuchi" | "targets" | "stands" | "wall-seats" | "roof" | "gallery" | "dais" | "banner" | "shrine" | "mat-edge" | "surrounds" | "officials" | "judges", string>;
1002
+ parts: Record<"scoreboard" | "net" | "antennae" | "goalposts" | "netposts" | "hoop" | "goal" | "boards" | "stumps" | "pylons" | "flags" | "fence" | "backstop" | "foul-poles" | "table-legs" | "walls" | "starting-blocks" | "backstroke-flags" | "false-start-rope" | "springboards" | "platforms" | "judges-stand" | "hurdles" | "steeplechase" | "high-jump" | "pole-vault" | "cage" | "padding" | "rink-boards" | "mound" | "azuchi" | "targets" | "stands" | "wall-seats" | "roof" | "gallery" | "dais" | "banner" | "shrine" | "mat-edge" | "surrounds" | "officials" | "judges" | "deck" | "cage-fence" | "cage-posts", string>;
997
1003
  };
998
1004
  /** The names of the zones that `zoneAt` answers with (rules.ts), by id. */
999
1005
  rules: Record<RuleId, string>;
package/dist/strings.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /** The words of the package, by language. */
2
2
  export const KYOGIJO_STRINGS = {
3
3
  en: {
4
- surface: { skating: "Skating rink", nfl: "NFL football field", cfl: "CFL football field", ifaf: "IFAF football field", nhl: "NHL hockey rink", nba: "NBA basketball court", mlb: "Baseball field", soccer: "Soccer pitch", curling: "Curling sheet", tennis: "Tennis court", volleyball: "Volleyball court", badminton: "Badminton court", pickleball: "Pickleball court", tabletennis: "Table tennis table", padel: "Padel court", squash: "Squash court", racquetball: "Racquetball court", sepaktakraw: "Sepak takraw court", teqball: "Teqball court", roundnet: "Roundnet court", netball: "Netball court", lacrosse: "Lacrosse field", rugby: "Rugby union field", afl: "Australian football ground", gaelic: "Gaelic football field", cricket: "Cricket ground", fieldhockey: "Field hockey pitch", handball: "Handball court", swimming: "Swimming pool", waterpolo: "Water polo field", diving: "Diving well", artisticswimming: "Artistic swimming pool", athletics: "Athletics track", judo: "Judo contest area", karate: "Karate competition area", kendo: "Kendo shiai-jo", sumo: "Sumo dohyō", kyudo: "Kyūdō range", dojo: "Dojo" },
4
+ surface: { skating: "Skating rink", nfl: "NFL football field", cfl: "CFL football field", ifaf: "IFAF football field", nhl: "NHL hockey rink", nba: "NBA basketball court", mlb: "Baseball field", soccer: "Soccer pitch", curling: "Curling sheet", tennis: "Tennis court", volleyball: "Volleyball court", badminton: "Badminton court", pickleball: "Pickleball court", tabletennis: "Table tennis table", padel: "Padel court", squash: "Squash court", racquetball: "Racquetball court", sepaktakraw: "Sepak takraw court", teqball: "Teqball court", roundnet: "Roundnet court", netball: "Netball court", lacrosse: "Lacrosse field", rugby: "Rugby union field", afl: "Australian football ground", gaelic: "Gaelic football field", cricket: "Cricket ground", fieldhockey: "Field hockey pitch", handball: "Handball court", swimming: "Swimming pool", waterpolo: "Water polo field", diving: "Diving well", artisticswimming: "Artistic swimming pool", athletics: "Athletics track", judo: "Judo contest area", karate: "Karate competition area", kendo: "Kendo shiai-jo", sumo: "Sumo dohyō", kyudo: "Kyūdō range", dojo: "Dojo", mma: "MMA cage" },
5
5
  about: {
6
6
  nfl: "an American football field, 120 by 53 and a third yards with its end zones, with a yard line every 5 yards, hash marks, numbers and goal posts",
7
7
  cfl: "a Canadian football field, 150 by 65 yards with its 20-yard end zones, with a yard line every 5 yards, hash marks, numbers and goal posts on the goal lines",
@@ -42,6 +42,7 @@ export const KYOGIJO_STRINGS = {
42
42
  sumo: "a sumo dohyō: a clay square of 6.7 metres with a ring of 4.55 metres made of 20 tawara",
43
43
  kyudo: "a kyūdōjō for kinteki: a shajō with five shooting positions, 28 metres from the targets at the azuchi",
44
44
  dojo: "a dojo of 20 jō of tatami",
45
+ mma: "an MMA cage: an eight-sided fenced area 9.14 metres (30 feet) across, on a platform 122 centimetres high",
45
46
  },
46
47
  status: { final: "Final", "final-ot": "Final/OT", "final-so": "Final/SO", "final-aet": "Final/AET", "final-pens": "Final/Pens", live: "Live", half: "Halftime", "extra-time": "Extra time", "extra-end": "Extra end", penalties: "Penalties", postponed: "Postponed", tiebreak: "Tiebreak", "match-tiebreak": "Match tiebreak", retired: "Retired", walkover: "Walkover" },
47
48
  endStatus: "End {n}",
@@ -226,6 +227,11 @@ export const KYOGIJO_STRINGS = {
226
227
  dojoBanner: "A plain dark banner hangs on the kamiza wall.",
227
228
  dojoAreas: "{n} contest areas of 8 metres are marked on the floor.",
228
229
  dojoWalls: "It has walls with {doors} and {windows}.",
230
+ mma: "an MMA cage: an eight-sided fenced area {width} metres across ({feet} feet), with a fence {fence} centimetres high and eight padded posts, {platform}",
231
+ mmaPlatform: "on a platform {height} centimetres high",
232
+ mmaFloor: "at floor level",
233
+ mmaGates: "It has two gates, opposite each other.",
234
+ mmaSteps: "Steps lead up to the platform at each gate.",
229
235
  board: {
230
236
  ippon: "Ippon", wazaari: "Waza-ari", yuko: "Yuko", shido: "Shido", senshu: "Senshu", chui: "Chui", points: "Points", kimarite: "Kimarite",
231
237
  techniques: { men: "Men", kote: "Kote", do: "Dō", tsuki: "Tsuki", hansoku: "Hansoku" },
@@ -287,7 +293,7 @@ export const KYOGIJO_STRINGS = {
287
293
  results: { touchdown: "touchdown", "field-goal": "field goal", "missed-field-goal": "missed field goal", punt: "punt", turnover: "turnover", interception: "interception", fumble: "fumble", downs: "turnover on downs", safety: "safety", "end-of-half": "end of the half" },
288
294
  },
289
295
  special: {
290
- guest: { skating: "rink", nfl: "football field", cfl: "football field", ifaf: "football field", nhl: "rink", nba: "court", mlb: "baseball field", soccer: "pitch", curling: "sheet", tennis: "court", volleyball: "court", badminton: "court", pickleball: "court", tabletennis: "table", padel: "court", squash: "court", racquetball: "court", sepaktakraw: "court", teqball: "court", roundnet: "court", netball: "court", lacrosse: "field", rugby: "field", afl: "ground", gaelic: "field", cricket: "ground", fieldhockey: "pitch", handball: "court", swimming: "pool", waterpolo: "pool", diving: "well", artisticswimming: "pool", athletics: "track", judo: "contest area", karate: "competition area", kendo: "shiai-jo", sumo: "dohyō", kyudo: "range", dojo: "dojo" },
296
+ guest: { skating: "rink", nfl: "football field", cfl: "football field", ifaf: "football field", nhl: "rink", nba: "court", mlb: "baseball field", soccer: "pitch", curling: "sheet", tennis: "court", volleyball: "court", badminton: "court", pickleball: "court", tabletennis: "table", padel: "court", squash: "court", racquetball: "court", sepaktakraw: "court", teqball: "court", roundnet: "court", netball: "court", lacrosse: "field", rugby: "field", afl: "ground", gaelic: "field", cricket: "ground", fieldhockey: "pitch", handball: "court", swimming: "pool", waterpolo: "pool", diving: "well", artisticswimming: "pool", athletics: "track", judo: "contest area", karate: "competition area", kendo: "shiai-jo", sumo: "dohyō", kyudo: "range", dojo: "dojo", mma: "cage" },
291
297
  title: "{guest} in {host}",
292
298
  game: "{event}, {date}.",
293
299
  inside: "The {guest} lies wholly inside the outline of {host}.",
@@ -382,7 +388,7 @@ export const KYOGIJO_STRINGS = {
382
388
  boundary: "Boundary", pitch: "Pitch", "bowling-crease": "Bowling crease", "popping-crease": "Popping crease", "return-crease": "Return crease", wicket: "Wicket", "thirty-yard-circle": "30-yard circle",
383
389
  "twenty-three-line": "23-metre line", "shooting-circle": "Shooting circle", "penalty-spot": "Penalty spot", "broken-circle-line": "Broken line round the circle", "goal-area-line": "Goal-area line",
384
390
  "finish-line": "Finish line", kerb: "Kerb", "lane-lines": "Lane lines", bend: "Bend", straight: "Straight", "infield-pitch": "Soccer pitch", "start-line": "Start line", breakline: "Breakline", "water-jump": "Water jump", "exchange-zone": "Takeover zone",
385
- "referee-position": "Referee's place", "shiai-jo": "Shiai-jo", floorboard: "Floorboard", heri: "Heri, the mat's edge", "contest-area": "Contest area", "safety-area": "Safety area", "danger-zone": "Danger zone", "start-mark": "Start mark", "common-safe-zone": "Common safe zone", "free-zone": "Free zone", platform: "Platform", "technical-table": "Technical table", "centre-tape": "Centre tape", "kata-judges": "Judges, shomen side", "coach-chair": "Coach's chair", "kata-entry": "Entry and exit, opposite shomen", arena: "Arena floor", "competition-area": "Competition area", "boundary-band": "Boundary band", "start-mat": "Start mat", judge: "Judge", "between-areas": "Between the areas", "centre-cross": "Centre cross", "kaishi-sen": "Kaishi-sen", "outer-boundary": "Outer boundary", dohyo: "Dohyō", ring: "Ring", tawara: "Tawara", tokudawara: "Tokudawara", "shikiri-sen": "Shikiri-sen", "jano-me": "Jano-me", shajo: "Shajō", "shooting-position": "Shooting position", honza: "Honza", yamichi: "Yamichi", "yatori-michi": "Path for the arrows", azuchi: "Azuchi", mato: "Target", kamiza: "Kamiza", shimoza: "Shimoza", shinzen: "Shinzen", dais: "Dais, the seat of honour", banner: "Banner", entrance: "Entrance", window: "Window", tatami: "Tatami", wall: "Wall", "inner-lane": "Inner lane", "outer-lane": "Outer lane", "crossing-straight": "Crossing straight", "warm-up-lane": "Warm-up lane", padding: "Padding", infield: "Infield", "coaches-area": "Coaches' area", blocks: "Blocks", "track-line": "Line of the track", "start-lines": "Starting lines", ice: "Ice", "technical-panel": "Technical panel", referee: "Referee", "kiss-and-cry": "Kiss and cry", judges: "Judges", runway: "Runway", "take-off-board": "Take-off board", "landing-area": "Landing area", "throwing-circle": "Throwing circle", sector: "Landing sector", "stop-board": "Stop board", cage: "Cage", "throwing-arc": "Throwing arc", crossbar: "Crossbar", "landing-mat": "Landing mat", "run-up": "Run-up", "zero-line": "Zero line", box: "Box",
391
+ "referee-position": "Referee's place", "shiai-jo": "Shiai-jo", floorboard: "Floorboard", heri: "Heri, the mat's edge", "contest-area": "Contest area", "safety-area": "Safety area", "danger-zone": "Danger zone", "start-mark": "Start mark", "common-safe-zone": "Common safe zone", "free-zone": "Free zone", platform: "Platform", "technical-table": "Technical table", "centre-tape": "Centre tape", "kata-judges": "Judges, shomen side", "coach-chair": "Coach's chair", "kata-entry": "Entry and exit, opposite shomen", arena: "Arena floor", "competition-area": "Competition area", "boundary-band": "Boundary band", "start-mat": "Start mat", judge: "Judge", "between-areas": "Between the areas", "centre-cross": "Centre cross", "kaishi-sen": "Kaishi-sen", "outer-boundary": "Outer boundary", dohyo: "Dohyō", ring: "Ring", tawara: "Tawara", tokudawara: "Tokudawara", "shikiri-sen": "Shikiri-sen", "jano-me": "Jano-me", shajo: "Shajō", "shooting-position": "Shooting position", honza: "Honza", yamichi: "Yamichi", "yatori-michi": "Path for the arrows", azuchi: "Azuchi", mato: "Target", kamiza: "Kamiza", "cage-canvas": "Canvas", "cage-fence": "Fence", "cage-post": "Padded post", "cage-gate": "Gate", "cage-steps": "Steps", "cage-platform": "Platform", shimoza: "Shimoza", shinzen: "Shinzen", dais: "Dais, the seat of honour", banner: "Banner", entrance: "Entrance", window: "Window", tatami: "Tatami", wall: "Wall", "inner-lane": "Inner lane", "outer-lane": "Outer lane", "crossing-straight": "Crossing straight", "warm-up-lane": "Warm-up lane", padding: "Padding", infield: "Infield", "coaches-area": "Coaches' area", blocks: "Blocks", "track-line": "Line of the track", "start-lines": "Starting lines", ice: "Ice", "technical-panel": "Technical panel", referee: "Referee", "kiss-and-cry": "Kiss and cry", judges: "Judges", runway: "Runway", "take-off-board": "Take-off board", "landing-area": "Landing area", "throwing-circle": "Throwing circle", sector: "Landing sector", "stop-board": "Stop board", cage: "Cage", "throwing-arc": "Throwing arc", crossbar: "Crossbar", "landing-mat": "Landing mat", "run-up": "Run-up", "zero-line": "Zero line", box: "Box",
386
392
  "seven-metre-line": "7-metre line", "four-metre-line": "4-metre line", "throw-off-area": "Throw-off area", "restraining-line": "Restraining line", "wing-line": "Wing line", "marking-area": "Marking area", "two-point-arc": "Two-point arc",
387
393
  "lane-rope": "Lane rope", "lane-line": "Lane marking on the floor", "lane-end-cross": "Cross line at the end of the lane marking", "fifteen-metre-mark": "15 m mark", "touch-pad": "Touch panel", "starting-block": "Starting block", "backstroke-flags": "Backstroke flags", "false-start-rope": "False start rope", gutter: "Gutter",
388
394
  "two-metre-line": "2 m line", "five-metre-mark": "5 m mark", "six-metre-line": "6 m line", "half-distance-line": "Half distance line", "re-entry-area": "Re-entry area", "referee-platform": "Referee platform", "official-table": "Official table", "substitution-area": "Substitution area",
@@ -402,7 +408,7 @@ export const KYOGIJO_STRINGS = {
402
408
  "in-goal": "in-goal area", "twenty-two": "area between the try line and the 22-metre line", twenty: "area between the goal line and the 20-metre line", crease: "crease", "forward-fifty": "area inside the fifty metre arc", "centre-square": "centre square",
403
409
  "large-rectangle": "large rectangle", pitch: "pitch", circle: "circle", "twenty-three": "23-metre area", "goal-area": "goal area",
404
410
  "pool-end": "end of the pool, up to the 15 m mark", springboards: "springboards", platforms: "platforms", "centre-stage": "centre of the pool, the middle third",
405
- "contest-area": "contest area", ring: "ring", shajo: "shajō", yamichi: "yamichi", azuchi: "azuchi", kamiza: "kamiza", "crossing-straight": "crossing straight", "first-bend": "first bend", "second-bend": "second bend", judges: "judges", "kiss-and-cry": "kiss and cry", bend: "bend", "home-straight": "finish straight", "back-straight": "back straight", finish: "finish line", start: "start", "high-jump": "high jump", "pole-vault": "pole vault", "long-jump": "long jump", "triple-jump": "triple jump", "shot-put": "shot put", "discus-throw": "discus throw", "hammer-throw": "hammer throw", "javelin-throw": "javelin throw", "water-jump": "water jump",
411
+ "contest-area": "contest area", ring: "ring", shajo: "shajō", yamichi: "yamichi", azuchi: "azuchi", kamiza: "kamiza", cage: "cage", gate: "gate", "crossing-straight": "crossing straight", "first-bend": "first bend", "second-bend": "second bend", judges: "judges", "kiss-and-cry": "kiss and cry", bend: "bend", "home-straight": "finish straight", "back-straight": "back straight", finish: "finish line", start: "start", "high-jump": "high jump", "pole-vault": "pole vault", "long-jump": "long jump", "triple-jump": "triple jump", "shot-put": "shot put", "discus-throw": "discus throw", "hammer-throw": "hammer throw", "javelin-throw": "javelin throw", "water-jump": "water jump",
406
412
  },
407
413
  folded: {
408
414
  top: "Top house", bottom: "Bottom house", left: "Left house", right: "Right house",
@@ -432,7 +438,7 @@ export const KYOGIJO_STRINGS = {
432
438
  announce: "{name} view", announceAngle: "Turned to {yaw} degrees, seen from {pitch} degrees above the floor.",
433
439
  flat: "This browser cannot draw the 3D view, so the flat drawing is shown.",
434
440
  standing: "Standing on it, in the 3D view: {list}.", item: "{name} {h}", itemSag: "{name} {h} at the posts, {low} at the middle",
435
- parts: { scoreboard: "scoreboard (lower edge)", net: "net", antennae: "antennae", goalposts: "goal posts", netposts: "net posts", hoop: "baskets", goal: "goals", boards: "boards and glass", stumps: "stumps", pylons: "pylons", flags: "corner flags", fence: "fence", backstop: "backstop", "foul-poles": "foul poles", "table-legs": "table top", walls: "walls", "starting-blocks": "starting blocks", "backstroke-flags": "backstroke flags", "false-start-rope": "false start rope", springboards: "springboards", platforms: "platforms", "judges-stand": "judges' stand", hurdles: "hurdles", steeplechase: "steeplechase barriers", "high-jump": "high jump uprights and bar", "pole-vault": "pole vault uprights and bar", cage: "discus and hammer cage", padding: "padding", "rink-boards": "boards", mound: "clay mound", azuchi: "azuchi", targets: "targets", stands: "stands", "wall-seats": "seats on top of the wall", roof: "roof", gallery: "gallery", dais: "dais", banner: "banner", shrine: "shrine", "mat-edge": "mat thickness", surrounds: "surrounds", officials: "umpires' chairs and score tables", judges: "name cards on the judges' table" },
441
+ parts: { scoreboard: "scoreboard (lower edge)", net: "net", antennae: "antennae", goalposts: "goal posts", netposts: "net posts", hoop: "baskets", goal: "goals", boards: "boards and glass", stumps: "stumps", pylons: "pylons", flags: "corner flags", fence: "fence", backstop: "backstop", "foul-poles": "foul poles", "table-legs": "table top", walls: "walls", "starting-blocks": "starting blocks", "backstroke-flags": "backstroke flags", "false-start-rope": "false start rope", springboards: "springboards", platforms: "platforms", "judges-stand": "judges' stand", hurdles: "hurdles", steeplechase: "steeplechase barriers", "high-jump": "high jump uprights and bar", "pole-vault": "pole vault uprights and bar", cage: "discus and hammer cage", padding: "padding", "rink-boards": "boards", mound: "clay mound", azuchi: "azuchi", targets: "targets", stands: "stands", "wall-seats": "seats on top of the wall", roof: "roof", gallery: "gallery", dais: "dais", banner: "banner", shrine: "shrine", "mat-edge": "mat thickness", surrounds: "surrounds", officials: "umpires' chairs and score tables", judges: "name cards on the judges' table", deck: "platform", "cage-fence": "fence", "cage-posts": "padded posts" },
436
442
  },
437
443
  rules: {
438
444
  "defensive-zone": "Defensive zone",
@@ -527,7 +533,7 @@ export const KYOGIJO_STRINGS = {
527
533
  // (ISU Rule 281.1a; the JOC's usage). Television's インコース, アウトコース, バックストレート and ホームストレート are aliases in docs/skating.md. No rule book words were found for the figure skating
528
534
  // furniture (ジャッジ席, テクニカルパネル, レフェリー, キス・アンド・クライ): they are the usual words.
529
535
  ja: {
530
- surface: { skating: "スケートリンク", nfl: "NFLのフィールド", cfl: "CFLのフィールド", ifaf: "IFAFのフィールド", nhl: "NHLのアイスホッケーリンク", nba: "NBAのバスケットボールコート", mlb: "野球場", soccer: "サッカーのピッチ", curling: "カーリングのシート", tennis: "テニスコート", volleyball: "バレーボールコート", badminton: "バドミントンコート", pickleball: "ピックルボールコート", tabletennis: "卓球台", padel: "パデルコート", squash: "スカッシュコート", racquetball: "ラケットボールコート", sepaktakraw: "セパタクローコート", teqball: "テックボールコート", roundnet: "ラウンドネットコート", netball: "ネットボールコート", lacrosse: "ラクロスのフィールド", rugby: "ラグビーユニオンのグラウンド", afl: "オーストラリアンフットボールのグラウンド", gaelic: "ゲーリック・フットボールのフィールド", cricket: "クリケットのグラウンド", fieldhockey: "フィールドホッケーのピッチ", handball: "ハンドボールのコート", swimming: "競泳プール", waterpolo: "水球のフィールド", diving: "飛込プール", artisticswimming: "アーティスティックスイミングのプール", athletics: "陸上競技のトラック", judo: "柔道の試合場", karate: "空手道の試合場", kendo: "剣道の試合場", sumo: "相撲の土俵", kyudo: "弓道場", dojo: "道場" },
536
+ surface: { skating: "スケートリンク", nfl: "NFLのフィールド", cfl: "CFLのフィールド", ifaf: "IFAFのフィールド", nhl: "NHLのアイスホッケーリンク", nba: "NBAのバスケットボールコート", mlb: "野球場", soccer: "サッカーのピッチ", curling: "カーリングのシート", tennis: "テニスコート", volleyball: "バレーボールコート", badminton: "バドミントンコート", pickleball: "ピックルボールコート", tabletennis: "卓球台", padel: "パデルコート", squash: "スカッシュコート", racquetball: "ラケットボールコート", sepaktakraw: "セパタクローコート", teqball: "テックボールコート", roundnet: "ラウンドネットコート", netball: "ネットボールコート", lacrosse: "ラクロスのフィールド", rugby: "ラグビーユニオンのグラウンド", afl: "オーストラリアンフットボールのグラウンド", gaelic: "ゲーリック・フットボールのフィールド", cricket: "クリケットのグラウンド", fieldhockey: "フィールドホッケーのピッチ", handball: "ハンドボールのコート", swimming: "競泳プール", waterpolo: "水球のフィールド", diving: "飛込プール", artisticswimming: "アーティスティックスイミングのプール", athletics: "陸上競技のトラック", judo: "柔道の試合場", karate: "空手道の試合場", kendo: "剣道の試合場", sumo: "相撲の土俵", kyudo: "弓道場", dojo: "道場", mma: "総合格闘技のケージ" },
531
537
  about: {
532
538
  nfl: "アメリカンフットボールのフィールド。エンドゾーンを含めて120×53⅓ヤードで、5ヤードごとのヤードライン、ハッシュマーク、ヤードナンバー、ゴールポストがあります",
533
539
  cfl: "カナディアンフットボールのフィールド。20ヤードのエンドゾーンを含めて150×65ヤードで、5ヤードごとのヤードライン、ハッシュマーク、ヤードナンバー、ゴールライン上のゴールポストがあります",
@@ -568,6 +574,7 @@ export const KYOGIJO_STRINGS = {
568
574
  sumo: "相撲の土俵。一辺6.7mの粘土の正方形に、20俵でつくる直径4.55mの円があります",
569
575
  kyudo: "近的の弓道場。射位が5か所ある射場から、安土の的まで28mあります",
570
576
  dojo: "20畳の道場",
577
+ mma: "総合格闘技のケージ。金網で囲まれた、対辺間の距離が30フィート(約9.1m)の八角形で、高さ122cmの台の上にあります",
571
578
  },
572
579
  status: { final: "試合終了", "final-ot": "試合終了(延長)", "final-so": "試合終了(SO)", "final-aet": "試合終了(延長戦)", "final-pens": "試合終了(PK戦)", live: "試合中", half: "ハーフタイム", "extra-time": "延長戦", "extra-end": "エキストラエンド", penalties: "PK戦", postponed: "延期", tiebreak: "タイブレーク", "match-tiebreak": "マッチタイブレーク", retired: "途中棄権", walkover: "不戦勝" },
573
580
  endStatus: "第{n}エンド",
@@ -762,6 +769,11 @@ export const KYOGIJO_STRINGS = {
762
769
  dojoBanner: "上座側の壁に、無地の濃い色の垂れ幕が掛かっています。",
763
770
  dojoAreas: "床に、8m四方の試合場が{n}面示されています。",
764
771
  dojoWalls: "壁があり、{doors}と{windows}があります。",
772
+ mma: "総合格闘技のケージ。対辺間の距離が{feet}フィート(約{width}m)の八角形で、高さ{fence}cmの金網と、パッド付き支柱8本があります。{platform}",
773
+ mmaPlatform: "ケージは高さ{height}cmの台の上にあります",
774
+ mmaFloor: "ケージは床と同じ高さにあります",
775
+ mmaGates: "出入口は向かい合う2か所にあります。",
776
+ mmaSteps: "各出入口に、台へ上がる階段があります。",
765
777
  board: {
766
778
  ippon: "一本", wazaari: "技あり", yuko: "有効", shido: "指導", senshu: "先取", chui: "注意", points: "ポイント", kimarite: "決まり手",
767
779
  techniques: { men: "面", kote: "小手", do: "胴", tsuki: "突き", hansoku: "反則" },
@@ -823,7 +835,7 @@ export const KYOGIJO_STRINGS = {
823
835
  results: { touchdown: "タッチダウン", "field-goal": "フィールドゴール", "missed-field-goal": "フィールドゴール失敗", punt: "パント", turnover: "ターンオーバー", interception: "インターセプト", fumble: "ファンブル", downs: "ダウン更新失敗によるターンオーバー", safety: "セーフティ", "end-of-half": "ハーフ終了" },
824
836
  },
825
837
  special: {
826
- guest: { skating: "リンク", nfl: "アメリカンフットボールのフィールド", cfl: "カナディアンフットボールのフィールド", ifaf: "アメリカンフットボールのフィールド", nhl: "リンク", nba: "コート", mlb: "野球のグラウンド", soccer: "ピッチ", curling: "シート", tennis: "コート", volleyball: "コート", badminton: "コート", pickleball: "コート", tabletennis: "卓球台", padel: "コート", squash: "コート", racquetball: "コート", sepaktakraw: "コート", teqball: "コート", roundnet: "コート", netball: "コート", lacrosse: "フィールド", rugby: "グラウンド", afl: "グラウンド", gaelic: "フィールド", cricket: "グラウンド", fieldhockey: "ピッチ", handball: "コート", swimming: "プール", waterpolo: "プール", diving: "プール", artisticswimming: "プール", athletics: "トラック", judo: "試合場", karate: "試合場", kendo: "試合場", sumo: "土俵", kyudo: "弓道場", dojo: "道場" },
838
+ guest: { skating: "リンク", nfl: "アメリカンフットボールのフィールド", cfl: "カナディアンフットボールのフィールド", ifaf: "アメリカンフットボールのフィールド", nhl: "リンク", nba: "コート", mlb: "野球のグラウンド", soccer: "ピッチ", curling: "シート", tennis: "コート", volleyball: "コート", badminton: "コート", pickleball: "コート", tabletennis: "卓球台", padel: "コート", squash: "コート", racquetball: "コート", sepaktakraw: "コート", teqball: "コート", roundnet: "コート", netball: "コート", lacrosse: "フィールド", rugby: "グラウンド", afl: "グラウンド", gaelic: "フィールド", cricket: "グラウンド", fieldhockey: "ピッチ", handball: "コート", swimming: "プール", waterpolo: "プール", diving: "プール", artisticswimming: "プール", athletics: "トラック", judo: "試合場", karate: "試合場", kendo: "試合場", sumo: "土俵", kyudo: "弓道場", dojo: "道場", mma: "ケージ" },
827
839
  title: "{host}の中の{guest}",
828
840
  game: "{event}、{date}。",
829
841
  inside: "{guest}全体が{host}の輪郭の内側に収まっています。",
@@ -917,7 +929,7 @@ export const KYOGIJO_STRINGS = {
917
929
  "distance-line": "距離を示すライン", "large-rectangle": "大きい長方形", "small-rectangle": "小さい長方形", "thirteen-metre-arc": "13メートルアーク", "forty-metre-arc": "40メートルアーク", "penalty-point": "ペナルティーマーク",
918
930
  boundary: "バウンダリー", pitch: "ピッチ", "bowling-crease": "ボウリングクリース", "popping-crease": "ポッピングクリース", "return-crease": "リターンクリース", wicket: "ウィケット", "thirty-yard-circle": "30ヤードサークル",
919
931
  "twenty-three-line": "23メートルライン", "shooting-circle": "シューティングサークル", "penalty-spot": "ペナルティースポット", "broken-circle-line": "サークルを囲む破線", "goal-area-line": "ゴールエリアライン",
920
- "referee-position": "主審の位置", "shiai-jo": "試合場", floorboard: "床板", heri: "畳縁", "contest-area": "試合場内", "safety-area": "安全地帯", "danger-zone": "危険地帯", "start-mark": "開始線", "common-safe-zone": "共通の安全地帯", "free-zone": "フリーゾーン", platform: "畳の台", "technical-table": "係員席", "centre-tape": "中央のテープ", "kata-judges": "審判員席(正面側)", "coach-chair": "コーチ席", "kata-entry": "入退場口(正面の反対側)", arena: "アリーナの床", "competition-area": "試合場", "boundary-band": "境界の帯", "start-mat": "開始位置のマット", judge: "副審", "between-areas": "試合場の間", "centre-cross": "中央の×印", "kaishi-sen": "開始線", "outer-boundary": "場外の余地", dohyo: "土俵", ring: "土俵の円", tawara: "俵", tokudawara: "徳俵", "shikiri-sen": "仕切り線", "jano-me": "蛇の目", shajo: "射場", "shooting-position": "射位", honza: "本座", yamichi: "矢道", "yatori-michi": "矢取道", azuchi: "安土", mato: "的", kamiza: "上座", shimoza: "下座", shinzen: "神棚", dais: "上座の台", banner: "垂れ幕", entrance: "入口", window: "窓", tatami: "畳", wall: "壁", "inner-lane": "インレーン", "outer-lane": "アウトレーン", "crossing-straight": "交差ストレート", "warm-up-lane": "ウォームアップレーン", padding: "防護マット", infield: "インフィールド", "coaches-area": "コーチエリア", blocks: "ブロック", "track-line": "トラックのライン", "start-lines": "スタートライン", ice: "氷面", "technical-panel": "テクニカルパネル", referee: "レフェリー", "kiss-and-cry": "キス・アンド・クライ", judges: "ジャッジ席", runway: "助走路", "take-off-board": "踏切板", "landing-area": "砂場", "throwing-circle": "投てきサークル", sector: "着地場所", "stop-board": "足留材", cage: "囲い", "throwing-arc": "スターティング・ライン", crossbar: "バー", "landing-mat": "着地マット", "run-up": "助走路", "zero-line": "ゼロライン", box: "ボックス",
932
+ "referee-position": "主審の位置", "shiai-jo": "試合場", floorboard: "床板", heri: "畳縁", "contest-area": "試合場内", "safety-area": "安全地帯", "danger-zone": "危険地帯", "start-mark": "開始線", "common-safe-zone": "共通の安全地帯", "free-zone": "フリーゾーン", platform: "畳の台", "technical-table": "係員席", "centre-tape": "中央のテープ", "kata-judges": "審判員席(正面側)", "coach-chair": "コーチ席", "kata-entry": "入退場口(正面の反対側)", arena: "アリーナの床", "competition-area": "試合場", "boundary-band": "境界の帯", "start-mat": "開始位置のマット", judge: "副審", "between-areas": "試合場の間", "centre-cross": "中央の×印", "kaishi-sen": "開始線", "outer-boundary": "場外の余地", dohyo: "土俵", ring: "土俵の円", tawara: "俵", tokudawara: "徳俵", "shikiri-sen": "仕切り線", "jano-me": "蛇の目", shajo: "射場", "shooting-position": "射位", honza: "本座", yamichi: "矢道", "yatori-michi": "矢取道", azuchi: "安土", mato: "的", kamiza: "上座", "cage-canvas": "キャンバス", "cage-fence": "金網", "cage-post": "パッド付き支柱", "cage-gate": "出入口", "cage-steps": "階段", "cage-platform": "台", shimoza: "下座", shinzen: "神棚", dais: "上座の台", banner: "垂れ幕", entrance: "入口", window: "窓", tatami: "畳", wall: "壁", "inner-lane": "インレーン", "outer-lane": "アウトレーン", "crossing-straight": "交差ストレート", "warm-up-lane": "ウォームアップレーン", padding: "防護マット", infield: "インフィールド", "coaches-area": "コーチエリア", blocks: "ブロック", "track-line": "トラックのライン", "start-lines": "スタートライン", ice: "氷面", "technical-panel": "テクニカルパネル", referee: "レフェリー", "kiss-and-cry": "キス・アンド・クライ", judges: "ジャッジ席", runway: "助走路", "take-off-board": "踏切板", "landing-area": "砂場", "throwing-circle": "投てきサークル", sector: "着地場所", "stop-board": "足留材", cage: "囲い", "throwing-arc": "スターティング・ライン", crossbar: "バー", "landing-mat": "着地マット", "run-up": "助走路", "zero-line": "ゼロライン", box: "ボックス",
921
933
  "finish-line": "フィニッシュライン", kerb: "縁石", "lane-lines": "レーンライン", bend: "曲走路", straight: "直走路", "infield-pitch": "サッカーのピッチ", "start-line": "スタートライン", breakline: "ブレイクライン", "water-jump": "水濠", "exchange-zone": "テークオーバーゾーン",
922
934
  "seven-metre-line": "7mスローライン", "four-metre-line": "4mライン", "throw-off-area": "スローオフエリア", "restraining-line": "リストレイニングライン", "wing-line": "ウイングライン", "marking-area": "マーキングエリア", "two-point-arc": "2ポイントアーク",
923
935
  "lane-rope": "レーンロープ", "lane-line": "床面のレーンライン", "lane-end-cross": "クロスライン", "fifteen-metre-mark": "15mマーク", "touch-pad": "タッチ板", "starting-block": "スタート台", "backstroke-flags": "背泳ぎ用フラッグ", "false-start-rope": "フォルススタートロープ", gutter: "ガター",
@@ -938,7 +950,7 @@ export const KYOGIJO_STRINGS = {
938
950
  "in-goal": "インゴール", "twenty-two": "トライラインから22メートルラインまでのエリア", twenty: "ゴールラインから20メートルラインまでのエリア", crease: "クリース", "forward-fifty": "50メートルアークの内側", "centre-square": "センタースクエア",
939
951
  "large-rectangle": "大きい長方形", pitch: "ピッチ", circle: "サークル", "twenty-three": "23メートルエリア", "goal-area": "ゴールエリア",
940
952
  "pool-end": "プールの端(15mの目印まで)", springboards: "飛板", platforms: "固定台", "centre-stage": "プールの中央(真ん中の3分の1)",
941
- "contest-area": "試合場内", ring: "土俵の円", shajo: "射場", yamichi: "矢道", azuchi: "安土", kamiza: "上座", "crossing-straight": "交差ストレート", "first-bend": "第1カーブ", "second-bend": "第2カーブ", judges: "ジャッジ席", "kiss-and-cry": "キス・アンド・クライ", bend: "曲走路", "home-straight": "メイン側直走路", "back-straight": "バック・ストレート", finish: "フィニッシュライン", start: "スタート", "high-jump": "走高跳", "pole-vault": "棒高跳", "long-jump": "走幅跳", "triple-jump": "三段跳", "shot-put": "砲丸投", "discus-throw": "円盤投", "hammer-throw": "ハンマー投", "javelin-throw": "やり投", "water-jump": "水濠",
953
+ "contest-area": "試合場内", ring: "土俵の円", shajo: "射場", yamichi: "矢道", azuchi: "安土", kamiza: "上座", cage: "ケージ", gate: "出入口", "crossing-straight": "交差ストレート", "first-bend": "第1カーブ", "second-bend": "第2カーブ", judges: "ジャッジ席", "kiss-and-cry": "キス・アンド・クライ", bend: "曲走路", "home-straight": "メイン側直走路", "back-straight": "バック・ストレート", finish: "フィニッシュライン", start: "スタート", "high-jump": "走高跳", "pole-vault": "棒高跳", "long-jump": "走幅跳", "triple-jump": "三段跳", "shot-put": "砲丸投", "discus-throw": "円盤投", "hammer-throw": "ハンマー投", "javelin-throw": "やり投", "water-jump": "水濠",
942
954
  },
943
955
  folded: {
944
956
  top: "上のハウス", bottom: "下のハウス", left: "左のハウス", right: "右のハウス",
@@ -968,7 +980,7 @@ export const KYOGIJO_STRINGS = {
968
980
  announce: "{name}の視点", announceAngle: "向きは{yaw}度、見下ろす角度は{pitch}度です。",
969
981
  flat: "このブラウザーでは3D表示ができないため、平面の図を表示しています。",
970
982
  standing: "3D表示で立って見えるもの:{list}。", item: "{name} {h}", itemSag: "{name} 支柱の位置で{h}(中央は{low})",
971
- parts: { scoreboard: "スコアボードの下端", net: "ネット", antennae: "アンテナ", goalposts: "ゴールポスト", netposts: "支柱", hoop: "バスケットゴール", goal: "ゴール", boards: "ボードとガラス", stumps: "ウィケットのスタンプ", pylons: "パイロン", flags: "コーナーフラッグ", fence: "外野フェンス", backstop: "バックネット", "foul-poles": "ファウルポール", "table-legs": "天板", walls: "壁", "starting-blocks": "スタート台", "backstroke-flags": "背泳ぎ用フラッグ", "false-start-rope": "フォルススタートロープ", springboards: "飛板", platforms: "固定台", "judges-stand": "ジャッジ台", hurdles: "ハードル", steeplechase: "障害物", "high-jump": "走高跳の支柱とバー", "pole-vault": "棒高跳の支柱とバー", cage: "円盤投・ハンマー投の囲い", padding: "防護マット", "rink-boards": "フェンス", mound: "土の台", azuchi: "安土", targets: "的", stands: "スタンド", "wall-seats": "壁の上の観客席", roof: "屋根", gallery: "見学席", dais: "上座の台", banner: "垂れ幕", shrine: "神棚", "mat-edge": "畳の厚み", surrounds: "競技エリアのフェンス", officials: "審判席と記録台", judges: "審判員席の名札" },
983
+ parts: { scoreboard: "スコアボードの下端", net: "ネット", antennae: "アンテナ", goalposts: "ゴールポスト", netposts: "支柱", hoop: "バスケットゴール", goal: "ゴール", boards: "ボードとガラス", stumps: "ウィケットのスタンプ", pylons: "パイロン", flags: "コーナーフラッグ", fence: "外野フェンス", backstop: "バックネット", "foul-poles": "ファウルポール", "table-legs": "天板", walls: "壁", "starting-blocks": "スタート台", "backstroke-flags": "背泳ぎ用フラッグ", "false-start-rope": "フォルススタートロープ", springboards: "飛板", platforms: "固定台", "judges-stand": "ジャッジ台", hurdles: "ハードル", steeplechase: "障害物", "high-jump": "走高跳の支柱とバー", "pole-vault": "棒高跳の支柱とバー", cage: "円盤投・ハンマー投の囲い", padding: "防護マット", "rink-boards": "フェンス", mound: "土の台", azuchi: "安土", targets: "的", stands: "スタンド", "wall-seats": "壁の上の観客席", roof: "屋根", gallery: "見学席", dais: "上座の台", banner: "垂れ幕", shrine: "神棚", "mat-edge": "畳の厚み", surrounds: "競技エリアのフェンス", officials: "審判席と記録台", judges: "審判員席の名札", deck: "台", "cage-fence": "金網", "cage-posts": "パッド付き支柱" },
972
984
  },
973
985
  rules: {
974
986
  "defensive-zone": "ディフェンディングゾーン",